Dumps offically working for PRG-ROM on NROM!!!

Found bug with setting map_n_part due to >/< instead of >=/<= for setting called_buff...
Was also setting mem_type and part backwards in dump.c
The had issues with usb timing out for more than 1 buffer read back
Problem was due to lack of usbPoll while dumping during double buffering
Adding usbPoll to page read to correct issue

Appears to be issue with dumping first byte of this choplifter cart I'm testing with.
Not so certain it's my bug though..  No matter what I do the first byte reads
back 0x78 and copy I downloaded has 0x00.  Setting my first byte to 0x00 also
creates proper CRC32 according to bootgod's database.  So need to look into this more
to figure out what's going on.
This commit is contained in:
paul eeepc 2016-12-12 00:38:01 -06:00
parent 49ec51e767
commit c2359e67a5
11 changed files with 518 additions and 360 deletions

View File

@ -1,25 +1,25 @@
:100000000C94E8000C945A080C9405010C9405011A :100000000C94E8000C9477090C9405010C940501FC
:100010000C9405010C9405010C9405010C94050148 :100010000C9405010C9405010C9405010C94050148
:100020000C9405010C9405010C9405010C94050138 :100020000C9405010C9405010C9405010C94050138
:100030000C9405010C9405010C9405010C94050128 :100030000C9405010C9405010C9405010C94050128
:100040000C9405010C9405010C9405010C94050118 :100040000C9405010C9405010C9405010C94050118
:100050000C9405010C9405010C9405010C94050108 :100050000C9405010C9405010C9405010C94050108
:100060000C9405010C9405010C9405010C940501F8 :100060000C9405010C9405010C9405010C940501F8
:100070000C9405010C9405010C940501AE04B00428 :100070000C9405010C9405010C940501CB05CD05EC
:10008000B304B504B804BA04BD04BF04C204C40474 :10008000D005D205D505D705DA05DC05DF05E10584
:10009000C604C904CB04CD04CF04D104D304D504D1 :10009000E305E605E805EA05EC05EE05F005F205E1
:1000A000D7044A054A054A054A05D904DB04DD049C :1000A000F4056706670667066706F605F805FA05AC
:1000B000DF044A054A054A054A05E104E304E5046C :1000B000FC056706670667066706FE05000602067A
:1000C000E704E904EB04ED04EF04F104F304F504A0 :1000C0000406060608060A060C060E0610061206A8
:1000D000F704F904FB04FD04FF044A054A054A0538 :1000D0001406160618061A061C0667066706670643
:1000E0004A05010503054805050507050B050E052D :1000E00067061E06200665062206240628062B063D
:1000F000120515051B051805140517051A051D051C :1000F0002F063206380635063106340637063A062C
:100100001F05210523052505270529052B052D0597 :100100003C063E06400642064406460648064A06A7
:100110002F05310533053505370539053B053D0507 :100110004C064E06500652065406560658065A0617
:100120003F054A054A054A054A0544054105430578 :100120005C06670667066706670661065E06600688
:10013000470557055B0559055D0563056A056C05AF :1001300064067406780676067A06800687068906BF
:100140006E0570057A057D05D105D305D505D70562 :100140008B068D0697069A06EE06F006F206F40672
:10015000D905DB05DD05DF05E105E305E505E90575 :10015000F606F806FA06FC06FE0600070207060782
:10016000090212000101008096090400000000004D :10016000090212000101008096090400000000004D
:10017000000012011001FF000008C016DC0500029B :10017000000012011001FF000008C016DC0500029B
:10018000010200011E0349004E004C0020005200F5 :10018000010200011E0349004E004C0020005200F5
@ -28,283 +28,318 @@
:1001B000740065004E00650073004C006900760015 :1001B000740065004E00650073004C006900760015
:1001C000650073002E0063006F006D0004030904D6 :1001C000650073002E0063006F006D0004030904D6
:1001D00011241FBECFEFD4E0DEBFCDBF11E0A0E001 :1001D00011241FBECFEFD4E0DEBFCDBF11E0A0E001
:1001E000B1E0E2E3F3E102C005900D92A230B10765 :1001E000B1E0ECE6F5E102C005900D92A230B10756
:1001F000D9F713E0A2E0B1E001C01D92A938B10720 :1001F000D9F713E0A2E0B1E001C01D92AD38B1071C
:10020000E1F70E946E090C9497090C940000CF92BC :10020000E1F70E948B0A0C94B40A0C940000CF9280
:10021000DF92EF92FF92CF93DF93DB01F701E601CC :10021000DF92EF92FF92CF93DF93DB01F701E601CC
:10022000813549F18036F1F0803509F044C01296ED :10022000813579F1F0F4803509F04BC012968C914C
:100230008C911297808313968C91139781831496D7 :100230001297808313968C911397818314968C91D7
:100240008C911497828315968C91159783831696BB :100240001497828315968C911597838316968C91BB
:100250008C911697848317968C911797858318969F :100250001697848317968C911797858318968C919F
:100260008C9123C0A22FB0E0AE5FBE4F8C918083F3 :100260002AC0803629F0813661F58091300105C0C1
:1002700088818F5F1DC019968C91199780831A967B :10027000A22FB0E0AF5ABE4F8C91808388818F5FF0
:100280008C911A9781831B968C911B9782831C9665 :100280001DC019968C91199780831A968C911A9794
:100290008C911C9783831D968C911D9784831E9649 :1002900081831B968C911B9782831C968C911C9753
:1002A0008C911E9785831F968C9186838881895FA8 :1002A00083831D968C911D9784831E968C911E9737
:1002B000888380E001C084EBDF91CF91FF90EF90C5 :1002B00085831F968C9186838881895F888380E0FF
:1002C000DF90CF900895FC01809142039091430309 :1002C00001C084EBDF91CF91FF90EF90DF90CF9052
:1002D00040814078403851F48681D9018C938091D7 :1002D0000895CF93DF93FC01DB01E9018091410197
:1002E000420390914303409345030FC04FEFD90160 :1002E0009091420120812078203849F4368138836A
:1002F0004C93268120935C0322E433E030935E0329 :1002F000442309F445C08D919C9111970CC02FEFB8
:1003000020935D0320E92093450310924603228148 :100300002883268120932F01442351F170936203A7
:10031000213711F02034D1F4A0915D03B0915E0338 :100310006093610320E913962C93139714961C9213
:100320000D90BC91A02D25812C93A0915D03B091DF :100320002281213711F02034F1F5A0916103B091C1
:100330005E030D90BC91A02D248111962C93E09129 :1003300062030D90BC91A02D25812C93A0916103A7
:100340005D03F0915E0324812E5F24830895E2E033 :10034000B09162030D90BC91A02D248111962C9345
:10035000F1E09FEF8FEF919321E0E231F207D1F7C7 :10035000E0916103F091620324812E5F248323C026
:10036000809345038093350380934803809338033B :10036000A0911D01B0911E01B0936203A09361039F
:1003700080932503809315038093280380931803AB :1003700020E913962C93A0911D01B0911E01CECFC0
:100380000895FB01813389F038F4882359F08033D4 :10038000A0911D01B0911E0113963C911397383D29
:1003900099F4418722870EC0823351F0833361F490 :1003900021F48D919C911197ECCF2FEF288320E1D0
:1003A000278708C00E94A70105C04387248702C091 :1003A00020933001E8CFDF91CF910895E1E5F1E0AE
:1003B0004587268780E0089584EB0895CF93DF93E7 :1003B0009FEF8FEF919321E0E136F207D1F7809321
:1003C000FC0150E0CA01820F911D41970CF046C01C :1003C000440180932201809347018093250180930B
:1003D000222309F445C083818F3F09F043C0868101 :1003D000340180931001809337018093130181E0F1
:1003E0008F3F09F041C080E090E0EA01CE5FDE4F30 :1003E000809330010895FB01803391F038F4882325
:1003F000821750F40196DE01A80FB91F11973C91A6 :1003F00061F08130B9F42093300112C0823371F082
:100400003F3FB1F381EC31C066831382822F829526 :1004000050F0833379F427870BC00E94D60108C0CF
:10041000880F807E81508283148215821086178215 :100410004187228705C04387248702C045872687F6
:10042000118612861386148615861786CA0135E052 :1004200080E0089584EB0895CF93DF93FC0150E0C2
:10043000880F991F3A95E1F78E5E9E4F91838083D6 :10043000CA01820F911D41970CF047C0222309F495
:1004400080E090E04E5F5E4F821730F4FA01E80FD3 :1004400046C083818F3F09F044C086818F3F09F009
:10045000F91F60830196F8CF80E007C08EEB05C0DE :1004500042C080E090E0EA01CF5ADE4F821750F4AC
:1004600082EC03C08FEB01C080ECDF91CF91089547 :100460000196DE01A80FB91F11973C913F3FB1F3F0
:100470000F93FB01642F422F202F803888F088389B :1004700081EC32C066831382822F8295880F807E42
:1004800058F08059883060F40583242F30E0362BF3 :10048000815082831482158210861782118612860B
:100490003087278380E005C0CF010F910C94DE01E7 :1004900013861486158616861786CA0135E0880FDE
:1004A00086EB0F910895CF92DF92EF92FF920F9318 :1004A000991F3A95E1F78F599E4F9183808380E0A1
:1004B000CF93DF93FC01EB016A0182819FEC980FDF :1004B00090E04F5A5E4F821730F4FA01E80FF91FAF
:1004C0009E3270F49381913071F050F0923029F0A7 :1004C00060830196F8CF80E007C08EEB05C082EC18
:1004D0009330C1F562E173E008C062E273E005C0E9 :1004D00003C08FEB01C080ECDF91CF9108950F93A3
:1004E00062E473E002C062E373E0803768F4803551 :1004E000FB01642F422F202F803888F0883858F085
:1004F00080F4803408F047C00381248145810E9444 :1004F0008059883060F40583242F30E0362B308714
:10050000C101888381E03CC0803868F4960140E0F6 :10050000278380E005C0CF010F910C94140286EB85
:100510003CC07E019FEFE91AF90A038124814581DD :100510000F910895CF92DF92EF92FF920F93CF93B6
:100520000E9407013DC0982F97709130A1F080F094 :10052000DF93FC01EB016A01828190ED980F90331B
:10053000923029F0933031F462E173E00EC062E250 :1005300070F49381913071F050F0923029F0933043
:1005400073E00BC086E8888381E0D6018C9329C0D4 :10054000C1F56DE071E008C061E371E005C061E4F0
:1005500062E473E002C062E373E0803F50F4803CE9 :1005500071E002C06FE171E0803768F4803580F4AB
:1005600058F48038E0F00381248145810E943802EC :10056000803408F047C00381248145810E94F30153
:1005700017C0883F40F013C0DB01CD91DC9186812C :10057000888381E03CC0803868F4960140E03CC04C
:10058000F60180830EC096014FEFCF01DF91CF912E :100580007E019FEFE91AF90A0381248145810E94C7
:100590000F91FF90EF90DF90CF900C94630185E86E :1005900007013DC0982F97709130A1F080F0923004
:1005A0008883CE01DF91CF910F91FF90EF90DF9084 :1005A00029F0933031F46DE071E00EC061E371E049
:1005B000CF90089580915103803D59F410924603E5 :1005B0000BC086E8888381E0D6018C9329C061E472
:1005C00082E493E00E940303811103C088ED8093CD :1005C00071E002C06FE171E0803F50F4803C58F46C
:1005D0004503E0915D03F0915E039281848198135D :1005D0008038E0F00381248145810E946F0217C0BA
:1005E00002C088E9838380915103803F59F41092BF :1005E000883F40F013C0DB01CD91DC918681F6019C
:1005F000460382E493E00E942F03811103C088ED3B :1005F00080830EC096014FEFCF01DF91CF910F9115
:10060000809345030895EF92FF920F931F93CF932A :10060000FF90EF90DF90CF900C94690185E888838C
:10061000DF931F92CDB7DEB77C01FC019781906814 :10061000CE01DF91CF910F91FF90EF90DF90CF90BF
:10062000F70164818281681788F4F70100811181E4 :10062000089590914401809122018F3F29F481E047
:10063000060F111D892F99830E942C04F8018083D5 :100630009F3F19F480E001C082E0909134019F3F18
:10064000F70184818F5F84839981EACF80E00F90E6 :1006400009F083E0909110019F3F09F084E0089544
:10065000DF91CF911F910F91FF90EF9008950F932D :10065000623049F421E08134920739F121E08F3191
:100660001F93CF93DF93EC011F8110689C818A81D7 :10066000920761F10895633069F421E081349207C3
:10067000981790F54AEA65E585E50E94040445E58A :10067000E1F021E08F319207D9F021E08133920738
:100680006AEA8AE20E94040440EA65E585E50E9480 :10068000E9F008956430E1F421E08134920769F0E3
:1006900004046C81E881F981E60FF11D4081812F0E :1006900021E08F31920761F021E08133920759F018
:1006A0000E9404046C81812F0E942C04082F6C810D :1006A00021E08D30920751F008958FE191E0089597
:1006B000812F0E942C040813F5CF8C81E881F981E9 :1006B00081E391E008958DE091E0089581E491E077
:1006C000E80FF11D9081091304C08F5F8C83599846 :1006C0000895CF93DF93D09130018D2F8F7D823DA0
:1006D000CDCF519A599ACACF80E0DF91CF911F9127 :1006D00001F50E941103C82F8093020121E431E04B
:1006E0000F91089511B88FEF82B914B885B917B872 :1006E00030931E0120931D01D23D99F4C901D1E040
:1006F00088B98AB184718AB98BB18B6E8BB95098E5 :1006F000DC1728F46C2F0E942803DF5FF9CF90935A
:1007000058985198599A08950E947203399A419ABB :100700001E0180931D0120E8FC01238380ED80936E
:10071000389A40983A9A429A3C9A449A3D9A459A15 :10071000300180913001823F19F480EF80933001E5
:100720003F9A479A47988FEF84B915B8479A4798E8 :10072000C0913001C03D31F580911D0190911E01B5
:1007300014B812B881B914B885B95998519A089566 :10073000FC0123812038F1F4609102010E9428031A
:100740000E947203399A419A3C9A449A3D9A459A7A :1007400090931E0180931D01FC011482C3830E94BB
:10075000509A589A3F9A479A4798579A5F9A5F9843 :10075000BD03E0911D01F0911E01882311F08383F8
:100760008FEF84B915B8479A479814B884B915B86B :1007600009C088ED8383258187819085820F911D43
:100770005F9A5F9814B812B881B914B885B95998BE :1007700090878783DF91CF9108950F93CF93DF9375
:10078000519A0895813049F028F0823051F40E9446 :10078000EC016F8189858C3061F028F48A3039F072
:10079000A00305C00E94720302C00E94840380E08F :100790008B3081F002C08F3068F083EC0CC0606851
:1007A000089586E90895FC0181E080835898509A65 :1007A00001C060660FEF2A814E81888199810E9485
:1007B000000089B181835098589890818181892364 :1007B0008A058C8380E0DF91CF910F9108950F938C
:1007C000891308C08AEA86838483828385E58583CA :1007C0001F93CF93DF93EC011F8110689C818A8176
:1007D000838308955098589A89B1818389B182831F :1007D000981790F54AEA65E585E50E94B00445E57D
:1007E00089B1838389B1848389B1858389B1868303 :1007E0006AEA8AE20E94B00440EA65E585E50E9473
:1007F000509858980895803829F4CB010E94D3036B :1007F000B0046C81E881F981E60FF11D4081812F01
:1008000080E0089587E908959FEF94B985B9479AE4 :100800000E94B0046C81812F0E94D804082F6C8153
:10081000479862B945B95898509A5098589A14B860 :10081000812F0E94D8040813F5CF8C81E881F981DB
:100820000895509858984098419A429A62B99FEF1B :10082000E80FF11D9081091304C08F5F8C835998E4
:1008300094B985B9479A479814B800000000409AC7 :10083000CDCF519A599ACACF80E0DF91CF911F91C5
:1008400087FD41980000000000000000000000004B :100840000F91089511B88FEF82B914B885B917B810
:1008500083B14098419A089562B99FEF94B985B9E0 :1008500088B98AB184718AB98BB18B6E8BB9509883
:10086000479A479814B8409A87FD419800000000C5 :1008600058985198599A08950E942204399A419AA9
:100870000000000083B14098419A0895509858981C :10087000389A40983A9A429A3C9A449A3D9A459AB4
:100880009FEF94B962B985B9479A4798429845B99C :100880003F9A479A47988FEF84B915B8479A479887
:10089000409A87FD4198000000004098419A429A92 :1008900014B812B881B914B885B908950E94220419
:1008A00014B808959FEF94B9803208F4806885B930 :1008A000399A419A3C9A449A3D9A459A509A589A54
:1008B000479A479814B862B94498000000000000B5 :1008B0003F9A479A4798579A5F9A5F988FEF84B903
:1008C000000083B1449A0895CF93DF93982F862F29 :1008C00015B8479A479814B884B915B85F9A5F98D5
:1008D000642FE901913839F0923851F0903859F489 :1008D00014B812B881B914B885B90895813049F0B7
:1008E0000E94110402C00E942C04888380E004C08E :1008E00028F0823051F40E944E0405C00E94220478
:1008F0000E945204FACF81EADF91CF9108959FEFD1 :1008F00002C00E94340480E0089586E90895FC0156
:1009000094B9803208F4806885B9479A479862B9EB :1009000081E080835898509A000089B18183509883
:1009100045B9000045980000459A14B80895982FED :100910005898908181818923891308C08AEA868347
:10092000862F642F422F913049F028F0923051F4F5 :100920008483828385E58583838308955098589ACC
:100930000E943E0405C00E94040402C00E947F047D :1009300089B1818389B1828389B1838389B18483B9
:1009400080E0089580EA089590E08B35910508F0E5 :1009400089B1858389B186835098589808958038F5
:10095000A1C0FC01E25CFF4F0C94910911B895C055 :1009500029F4CB010E947F0480E0089587E908957F
:100960008FEF81B992C012B890C08FEF82B98DC05D :100960009FEF94B985B9479A479862B945B95898A5
:1009700014B88BC08FEF84B988C015B886C08FEFCC :10097000509A5098589A14B808955098589840989A
:1009800085B983C017B881C018B87FC08FEF88B908 :10098000419A429A62B99FEF94B985B9479A4798BC
:100990007CC038987AC0389A78C0409876C0409A1F :1009900014B800000000409A87FD41980000000054
:1009A00074C0399872C0399A70C041986EC0419A2B :1009A000000000000000000083B14098419A0895C3
:1009B0006CC03A986AC03A9A68C0429866C0429A37 :1009B00062B99FEF94B985B9479A479814B8409A9D
:1009C00064C03B9862C03B9A60C043985EC0439A43 :1009C00087FD4198000000000000000083B14098BE
:1009D0005CC03C985AC03C9A58C0449856C0449A4F :1009D000419A0895509858989FEF94B962B985B993
:1009E00054C03D9852C03D9A50C045984EC0459A5B :1009E000479A4798429845B9409A87FD4198000038
:1009F0004CC03E984AC03E9A48C0469846C0469A67 :1009F00000004098419A429A14B808959FEF94B924
:100A000044C03F9842C03F9A40C0479A3EC08AB116 :100A0000803208F4806885B9479A479814B862B96B
:100A100084718AB93AC08BB1847102C08BB18B6E7C :100A10004498000000000000000083B1449A08954B
:100A20008BB933C0509831C05898509A2EC0509806 :100A20009FEF94B9803208F4806885B9479A479857
:100A3000589A2BC05098589828C0519826C0519A5F :100A300062B945B9000045980000459A14B8089578
:100A400024C0599822C0599A20C053981EC0539A66 :100A4000982F862F642F422F913049F028F0923052
:100A50001CC05B981AC05B9A18C0559816C0559A6E :100A500051F40E94EA0405C00E94B00402C00E9442
:100A600014C05D9812C05D9A10C056980EC0569A78 :100A6000100580E0089580EA08958FEF84B984E04E
:100A70000CC05E980AC05E9A08C0579806C0579A84 :100A700085B9479A479829B188E085B9479A479838
:100A800004C05F9A02C05F9A5F9880E00895479A19 :100A800089B1807214B891E0422F407225FD90E048
:100A90004798FBCF8CE8089590E0FC01E058F109FD :100A900031E0882311F030E002C0911114C021E050
:100AA000EB30F105A0F5E756FF4F0C94910962B9C0 :100AA000411101C020E0811103C0222381F003C065
:100AB00022C08FEF84B965B91EC08FEF84B965B9C4 :100AB000222329F00AC0332351F082E108959923BB
:100AC000479A479805C08FEF84B965B95F9A5F98D8 :100AC00031F083E1089580E1089581E108958FEF89
:100AD00014B811C061B90FC064B90DC067B90BC0BB :100AD0000895CF93DF93982F862F642FE9019138E3
:100AE0009AB1862F846189238AB98AB16B7E682B7B :100AE00069F028F4903891F40E94BD040CC092384B
:100AF0006AB901C068B980E008959BB1862F84610E :100AF00041F0933859F40E94350505C00E94D8048E
:100B000089238BB98BB16B7E682B6BB9F4CF8DE8E1 :100B000002C00E94FE04888380E001C081EADF9178
:100B10000895813A61F0823AB9F0803A11F58FEF89 :100B1000CF910895EF92FF920F93CF93DF9300D080
:100B200084B965B9479A479814B842B916C08FEF8F :100B20001F92CDB7DEB77C018FEF84B965B9479AC4
:100B300084B965B9479A479814B842B967FF02C0AB :100B3000479814B8409A67FD419842B980E0011186
:100B400041980BC0419A09C042B98FEF84B9603215 :100B400003C00000000008C02B834A8389830E94F1
:100B500030F415B8479A479814B880E0089565B9FD :100B50004E0889814A812B8193B1F701E80FF11D7D
:100B6000F9CF8EE80895803B61F422B98FEF84B904 :100B600090834F5F42B98F5F281748F74098419AAA
:100B700045B9479A479865B95F9A5F9814B880E07D :100B70000F900F900F90DF91CF910F91FF90EF901A
:100B800008958FE80895CF93DF93EB0190E0805CA8 :100B8000089590E08B35910508F0A1C0FC01E25C6E
:100B900091098C309105F8F48C559F4FFC010C9411 :100B9000FF4F0C94AE0A11B895C08FEF81B992C087
:100BA000910980B113C083B111C086B10FC089B162 :100BA00012B890C08FEF82B98DC014B88BC08FEF90
:100BB0000DC082B10BC085B109C088B107C08BB12F :100BB00084B988C015B886C08FEF85B983C017B8CF
:100BC00005C081B103C084B101C087B1888380E0D2 :100BC00081C018B87FC08FEF88B97CC038987AC0D0
:100BD00003C08AB1FBCF80E9DF91CF9108950F93D5 :100BD000389A78C0409876C0409A74C0399872C0EC
:100BE000811102C0589A01C058988FEF84B922B978 :100BE000399A70C041986EC0419A6CC03A986AC0F8
:100BF00045B9479A479805B9459800000000459ABD :100BF0003A9A68C0429866C0429A64C03B9862C004
:100C0000419A14B858980F9108950F93022F81308C :100C00003B9A60C043985EC0439A5CC03C985AC00F
:100C100061F030F0823089F4242F462F60E008C064 :100C10003C9A58C0449856C0449A54C03D9852C01B
:100C2000242F462F6FEF81E004C0242F462F6FEF53 :100C20003D9A50C045984EC0459A4CC03E984AC027
:100C300080E00E94EF0580E001C08AEA0F910895EC :100C30003E9A48C0469846C0469A44C03F9842C033
:100C40000F93811102C0589A01C058988FEF84B950 :100C40003F9A40C0479A3EC08AB184718AB93AC07F
:100C500002B925B9479A479845B95F9A5F9814B881 :100C50008BB1847102C08BB18B6E8BB933C050984D
:100C60004498000000000000000083B1449A419ABB :100C600031C05898509A2EC05098589A2BC050981E
:100C700058980F9108950F931F93CF93DF93E80136 :100C7000589828C0519826C0519A24C0599822C02B
:100C8000813851F0823891F08038A9F4022F242F56 :100C8000599A20C053981EC0539A1CC05B981AC032
:100C9000462F6FEF81E005C0022F242F462F6FEF04 :100C90005B9A18C0559816C0559A14C05D9812C03A
:100CA00080E00E942006888380E006C0022F242F67 :100CA0005D9A10C056980EC0569A0CC05E980AC045
:100CB000462F60E0F5CF8BEADF91CF911F910F9126 :100CB0005E9A08C0579806C0579A04C05F9A02C04F
:100CC00008950F931F93CF93DF931F92CDB7DEB795 :100CC0005F9A5F9880E00895479A4798FBCF8CE839
:100CD000FC0182E593E090936E0380936D0319828B :100CD000089590E0FC01E058F109EB30F105A0F532
:100CE000808187FF02C081E089838181833009F49C :100CE000E756FF4F0C94AE0A62B922C08FEF84B969
:100CF0004BC028F48130D1F08230C1F179C0853009 :100CF00065B91EC08FEF84B965B9479A479805C09A
:100D000009F467C008F454C0863009F071C010922D :100D00008FEF84B965B95F9A5F9814B811C061B963
:100D1000520380915A0380935303E0915D03F09155 :100D10000FC064B90DC067B90BC09AB1862F84614A
:100D20005E0382818093540383E060C08281803BB4 :100D200089238AB98AB16B7E682B6AB901C068B918
:100D300038F4803A88F4803858F40E94A40459C0EA :100D300080E008959BB1862F846189238BB98BB1A4
:100D4000803C78F42481458163810E94B30551C0C1 :100D40006B7E682B6BB9F4CF8DE80895813A61F022
:100D500064810E944C054DC0448165810E948905D3 :100D5000823AB9F0803A11F58FEF84B965B9479AB4
:100D600048C063E573E00E94C3051DC082818038DE :100D6000479814B842B916C08FEF84B965B9479A4D
:100D700018F40E94C2033DC063E573E00E94FB03C8 :100D7000479814B842B967FF02C041980BC0419A26
:100D80008093520388E032C08281803830F423811E :100D800009C042B98FEF84B9603230F415B8479A80
:100D9000448165810E948F042CC023E533E04481A7 :100D9000479814B880E0089565B9F9CF8EE80895B2
:100DA00065810E9464048093520389818F5F1EC015 :100DA000803B61F422B98FEF84B945B9479A4798DF
:100DB0008281803830F42381448165810E94050658 :100DB00065B95F9A5F9814B880E008958FE8089548
:100DC00018C003E513E02481458163810E943B063E :100DC000CF93DF93EB0190E0805C91098C3091052B
:100DD000EACFAE014F5F5F4F62E573E0CF010E9443 :100DD000F8F48C559F4FFC010C94AE0A80B113C0FF
:100DE000530290936E0380936D0305C0898303C003 :100DE00083B111C086B10FC089B10DC082B10BC0F3
:100DF00080E88093520389810F90DF91CF911F91FA :100DF00085B109C088B107C08BB105C081B103C0FE
:100E00000F910895E0915D03F0915E03448120818C :100E000084B101C087B1888380E003C08AB1FBCF81
:100E10003181582FFC01742F781B972F9E0F8E2F36 :100E100080E9DF91CF9108950F93811102C0589A14
:100E2000851B861730F48191D901A90FB11D8C93D0 :100E200001C058988FEF84B922B945B9479A4798BD
:100E3000F4CFE0915D03F0915E038481860F84839B :100E300005B9459800000000459A419A14B85898A1
:100E400090915C03961B90935C0310925A03640F7D :100E40000F9108950F93022F813061F030F08230BE
:100E50008281861302C088E9838381E0911180E05A :100E500089F4242F462F60E008C0242F462F6FEF1F
:100E60000895CF93DF9360916F03635067FDA4C033 :100E600081E004C0242F462F6FEF80E00E940C0722
:100E700080916C03CCE0D0E0C81BD109CD58DC4F89 :100E700080E001C08AEA0F9108950F93811102C0AA
:100E800080916B038D3209F085C0683009F092C003 :100E8000589A01C058988FEF84B902B925B9479A8A
:100E900083EC80935F038AE58093010110925B03EA :100E9000479845B95F9A5F9814B8449800000000DD
:100EA0008881807621F0CE010E94610660C08A812F :100EA0000000000083B1449A419A58980F91089528
:100EB000109268039981911106C01092690328E687 :100EB0000F931F93CF93DF93E801813851F082386D
:100EC00033E082E050C0953019F4809370033DC048 :100EC00091F08038A9F4022F242F462F6FEF81E094
:100ED0009630A9F59B81913019F482E791E004C026 :100ED00005C0022F242F462F6FEF80E00E943D07B0
:100EE000923041F480E691E090936E0380936D031D :100EE000888380E006C0022F242F462F60E0F5CFD4
:100EF00082E121C09330F1F4811108C08CEC91E0C3 :100EF0008BEADF91CF911F910F9108950F931F936C
:100F000090936E0380936D0384E015C0813041F4AB :100F0000CF93DF931F92CDB7DEB7FC0183E091E072
:100F100082EA91E090936E0380936D038AE20BC0A6 :100F100090937203809371031982808187FF02C0CE
:100F2000823041F484E891E090936E0380936D03E6 :100F200081E089838181833009F44BC028F48130CA
:100F30008EE101C080E090E490935B0318C098308C :100F3000D1F08230C1F179C0853009F467C008F47E
:100F400079F0993031F48093720328E633E080E041 :100F400054C0863009F071C01092030180910B01EA
:100F50000AC081E09A3009F080E028E633E003C05F :100F500080930401E0916103F091620382818093A8
:100F600022E733E081E030936E0320936D038F3FDF :100F6000050183E060C08281803B38F4803A88F4D8
:100F700039F4988197FD8E8190E890935B0307C0C8 :100F7000803858F40E94C10559C0803C78F424811F
:100F80009F81911104C09E81981708F4892F809346 :100F8000458163810E94D00651C064810E94690638
:100F9000000110C080915B0387FF0CC0CE010E944E :100F90004DC0448165810E94A60648C064E071E0AE
:100FA00002078F3F21F48EE18093010103C081117C :100FA0000E94E0061DC08281803818F40E946E0401
:100FB0001092000110926F038091010184FF4DC0D7 :100FB0003DC064E071E00E94A7048093030188E0D3
:100FC000809100018F3F09F448C0C82F893008F094 :100FC00032C08281803830F42381448165810E945F
:100FD000C8E08C1B8093000180915F0398E889270B :100FD00020052CC024E031E0448165810E94690530
:100FE00080935F03CC2361F180916D0390916E0338 :100FE0008093030189818F5F1EC08281803830F435
:100FF00020915B0326FF12C0A0E6B3E02FE533E0AB :100FF0002381448165810E94220718C004E011E02A
:1010000020953095280F391F4C2F4A0FF901EA0F10 :101000002481458163810E945807EACFAE014F5F7A
:10101000FB1FE491ED934A13F9CF09C0E0E6F3E03A :101010005F4F63E071E0CF010E948A0290937203F8
:10102000DC012C2F2E0F3D9131932E13FCCF019616 :101020008093710305C0898303C080E88093030126
:101030002FEF2C0F820F911D90936E0380936D0301 :1010300089810F90DF91CF911F910F910895E091D9
:101040006C2F80E693E00E945608CC5FCC3019F0FC :101040006103F0916203448120813181582FFC01BA
:101050008FEF80930001C093010184E199B19471F5 :10105000742F781B972F9E0F8E2F851B861730F4C9
:1010600031F48150D9F71092700310926A03DF9126 :101060008191D901A90FB11D8C93F4CFE091610357
:10107000CF910895E9E6F0E0808182608083E89A6C :10107000F09162038481860F848390912F01961BE7
:101080000895A82FB92F80E090E041E050EA6095E4 :1010800090932F0110920B01640F8281861302C08E
:1010900030E009C02D9182279795879510F084271D :1010900088E9838381E0911180E00895CF93DF9305
:1010A0009527305EC8F36F5FA8F30895EADF8D934C :1010A00060917303635067FDA4C080917003CCE02E
:1010B0009D930895CF93CFB7CF93DF93C3954C9B68 :1010B000D0E0C81BD109C958DC4F80916F038D3235
:1010C000E9F74C9B0BC04C9B09C04C9B07C04C9B49 :1010C00009F085C0683009F092C083EC8093630317
:1010D00005C04C9B03C04C9B01C089C06F93C0915D :1010D0008AE58093010110920C018881807621F0CD
:1010E0006C03DD27CD58DC4F2F9365E54C9B03C087 :1010E000CE010E947E0760C08A8110926C039981B4
:1010F0002F916F91E6CF0F931F934F9320E040E124 :1010F000911106C010926D032CE633E082E050C0DF
:101100005F9309B1047104FB27F93F9350E03BE082 :10110000953019F4809374033DC09630A9F59B8106
:1011100039C0147140642F77012F5F5F1EC0406893 :10111000913019F482E791E004C0923041F480E606
:1011200019B114712F7752501FC0406409B12F7745 :1011200091E0909372038093710382E121C0933028
:101130000471D1F15F5F00C023C0406219B12F7705 :10113000F1F4811108C08CEC91E0909372038093DC
:10114000147191F15F5F00C025C0047110275150E8 :10114000710384E015C0813041F482EA91E090930C
:1011500012F45D5F0000115027952C3F19B1C8F6BD :101150007203809371038AE20BC0823041F484E809
:1011600014710127015027952C3FC8F64227499357 :1011600091E090937203809371038EE101C080E05F
:1011700009B1047110274F73115027952C3FA8F621 :1011700090E490930C0118C0983079F0993031F4D4
:101180004695469519B1147179F0012701502795BC :10118000809376032CE633E080E00AC081E09A3059
:101190002C3F98F66B5A60F3315009B1B0F600C09D :1011900009F080E02CE633E003C026E733E081E08D
:1011A00011E01CBB002717C03B503195C31BD0403A :1011A00030937203209371038F3F39F4988197FD38
:1011B00011E01CBB0881033CF9F00B34E9F02091ED :1011B0008E8190E890930C0107C09F81911104C02B
:1011C0006A031981110F1213EDCF093651F10D3257 :1011C0009E81981708F4892F8093000110C08091A8
:1011D00011F0013E39F7009371033F915F914F91F8 :1011D0000C0187FF0CC0CE010E941F088F3F21F435
:1011E0001F910F912F916F91CCB3C0FD67CFDF910D :1011E0008EE18093010103C08111109200011092E1
:1011F000CF91CFBFCF91189520917103222369F32E :1011F00073038091010184FF4DC0809100018F3FF6
:1012000010916F03112339F534303AF130936F03A5 :1012000009F448C0C82F893008F0C8E08C1B8093CF
:1012100020936B0310916C033BE0311B30936C0304 :1012100000018091630398E8892780936303CC23BE
:101220001CC000916F030130B4F40AE53091010154 :1012200061F1809171039091720320910C0126FF6E
:1012300034FD14C000930101CFE5D3E013C00527AE :1012300012C0A4E6B3E023E633E020953095280FF2
:1012400010E000C000000BB91AC0052710E0221FF3 :10124000391F4C2F4A0FF901EA0FFB1FE491ED9370
:101250001DC010E021C04AE502C032ED432FC4E1B9 :101250004A13F9CF09C0E4E6F3E0DC012C2F2E0F8E
:10126000D0E032E01AB114615C9A0BB11AB954E1C2 :101260003D9131932E13FCCF01962FEF2C0F820F5F
:1012700020E865E320FF05270BB9279517951C3F4C :10127000911D90937203809371036C2F84E693E029
:10128000F0F66695B8F7B1F720FF05270BB927955B :101280000E947309CC5FCC3019F08FEF809300017E
:1012900017951C3FD0F62795179517FF05270000D7 :10129000C093010184E199B1947131F48150D9F77F
:1012A0001C3F0BB9B0F629913A9519F70B7E1091B6 :1012A0001092740310926E03DF91CF910895E9E6D6
:1012B0007003110FC651D0400BB911F010936A039F :1012B000F0E0808182608083E89A0895A82FB92F9A
:1012C00011E01CBB00611AB11B7E402F4B7E54E025 :1012C00080E090E041E050EA609530E009C02D9167
:1012D0005A95F1F70BB91AB94BB97FCF2EE088E1D7 :1012D00082279795879510F084279527305EC8F36D
:1012E00090E00FB6F894A895809360000FBE20930D :1012E0006F5FA8F30895EADF8D939D930895CF93E0
:1012F00060000E943A08549A80E0815041F0A8951D :1012F000CFB7CF93DF93C3954C9BE9F74C9B0BC0C3
:10130000EFE9FFE03197F1F700C00000F6CF549805 :101300004C9B09C04C9B07C04C9B05C04C9B03C029
:101310000E9472037894A8950E9431070E94DA0215 :101310004C9B01C089C06F93C0917003DD27C958F1
:10132000FACFEE0FFF1F0590F491E02D0994F89489 :10132000DC4F2F9365E54C9B03C02F916F91E6CF67
:02133000FFCFED :101330000F931F934F9320E040E15F9309B1047135
:02133200FF5A60 :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 :00000001FF

View File

@ -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, uint16_t *rlen)
uint8_t * buffer_usb_call( setup_packet *spacket, uint8_t *rv, uint8_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 uint8_t *rptr = rv; //used for return pointer set to small rv buffer by default
//some opcodes place buffer number in misc/data //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; // called_buff = &buff1;
switch ( spacket->miscdata ) { switch ( spacket->miscdata ) {
//2 buffers minimum support //2 buffers minimum support
@ -653,7 +653,7 @@ void update_buffers()
} }
//usbPoll();
//this will get entered on first and all successive calls //this will get entered on first and all successive calls
if ( operation == DUMPING ) { if ( operation == DUMPING ) {
//buffer_payload will pass cur_buff to usb driver on next IN transfer //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 //send buffer off to dump
result = dump_page( cur_buff ); result = dump_page( cur_buff );
if (result != SUCCESS) { if (result != SUCCESS) {
cur_buff->status = PROBLEM; cur_buff->status = result;
} else { } else {
cur_buff->status = DUMPED; cur_buff->status = DUMPED;
//increment page_num so everything is ready for next dump //increment page_num so everything is ready for next dump
@ -679,6 +679,7 @@ void update_buffers()
cur_buff->page_num += cur_buff->reload; cur_buff->page_num += cur_buff->reload;
} }
} }
} }

View File

@ -2,6 +2,7 @@
#define _buffer_h #define _buffer_h
#include <avr/io.h> #include <avr/io.h>
#include "usbdrv.h"
#include "types.h" #include "types.h"
#include "logic.h" #include "logic.h"
#include "usb.h" #include "usb.h"

View File

@ -9,7 +9,7 @@
uint8_t dump_page( buffer *buff ) { uint8_t dump_page( buffer *buff ) {
uint8_t addrH = buff->page_num; //A15:8 while accessing page 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 //TODO use mapper to set mapper controlled address bits
@ -18,10 +18,10 @@ uint8_t dump_page( buffer *buff ) {
switch ( buff->mem_type ) { switch ( buff->mem_type ) {
case PRGROM: case PRGROM:
addrH |= 0x80; //$8000 addrH |= 0x80; //$8000
//uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last ) //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( buff->data, addrH, buff->id, buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id,
//id contains MSb of page when <256B buffer //id contains MSb of page when <256B buffer
(buff->last_idx | buff->id) ); buff->last_idx, ~FALSE );
break; break;
case CHRROM: //$0000 case CHRROM: //$0000
//buff->cur_byte = nes_ppu_page_rd( buff->data, addrH, buff->id, //buff->cur_byte = nes_ppu_page_rd( buff->data, addrH, buff->id,
@ -29,12 +29,12 @@ uint8_t dump_page( buffer *buff ) {
break; break;
case PRGRAM: case PRGRAM:
addrH |= 0x60; //$6000 addrH |= 0x60; //$6000
buff->cur_byte = nes_cpu_page_rd( buff->data, addrH, buff->id, buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id,
(buff->last_idx | buff->id) ); buff->last_idx, ~FALSE );
break; break;
case SNESROM: case SNESROM:
case SNESRAM: case SNESRAM:
addrX = ((buff->page_num)>>8); //warn addrX = ((buff->page_num)>>8);
break; break;
default: default:
return ERR_BUFF_UNSUP_MEM_TYPE; return ERR_BUFF_UNSUP_MEM_TYPE;

View File

@ -2,6 +2,7 @@
#define _dump_h #define _dump_h
#include <avr/io.h> #include <avr/io.h>
#include "usbdrv.h"
#include "types.h" #include "types.h"
#include "logic.h" #include "logic.h"
#include "usb.h" #include "usb.h"

View File

@ -391,10 +391,12 @@ uint8_t ciram_a10_mirroring( void )
return UNKNOWN; 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 * decode A15 from addrH to set /ROMSEL as expected
* float EXP0 * float EXP0
* toggle M2 as NES would * 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 * Pre: nes_init() setup of io pins
* num_bytes can't exceed 256B page boundary * num_bytes can't exceed 256B page boundary
* Post:address left on bus * Post:address left on bus
@ -403,7 +405,7 @@ uint8_t ciram_a10_mirroring( void )
* data buffer filled starting at first to last * data buffer filled starting at first to last
* Rtn: Index of last byte read * 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; 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 _ROMSEL_LO(); //romsel trails M2 during CPU operations
} }
//set lower address bits
ADDR_OUT = first; //doing this prior to entry and right after latching ADDR_OUT = first; //doing this prior to entry and right after latching
//gives longest delay between address out and latching data //gives longest delay between address out and latching data
for( i=0; i<=last; i++ ) { for( i=0; i<=len; i++ ) {
//set lower address bits
//couple more NOP's waiting for data //couple more NOP's waiting for data
//zero nop's returned previous databus value if ( poll == FALSE ) {
NOP(); //one nop got most of the bits right NOP(); //one prob good enough considering the if/else
NOP(); //two nop got all the bits right NOP();
NOP(); //add third nop for some extra } else {
//might need to wait longer for some carts... usbPoll();
}
//latch data //latch data
data[i] = DATA_IN; data[i] = DATA_IN;
//set lower address bits
ADDR_OUT = ++first; ADDR_OUT = ++first;
} }

View File

@ -2,6 +2,7 @@
#define _nes_h #define _nes_h
#include <avr/io.h> #include <avr/io.h>
#include "usbdrv.h"
#include "pinport.h" #include "pinport.h"
#include "shared_dictionaries.h" #include "shared_dictionaries.h"
#include "shared_errors.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 ); uint8_t nes_ppu_rd( uint8_t addrH, uint8_t addrL );
void nes_ppu_wr( uint8_t addrH, uint8_t addrL, uint8_t data ); void nes_ppu_wr( uint8_t addrH, uint8_t addrL, uint8_t data );
uint8_t ciram_a10_mirroring( void ); 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 #endif

View File

@ -92,9 +92,7 @@ error:
int set_mem_n_part( USBtransfer *transfer, int buff_num, int mem_type, int part_num ) 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, 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) ), buff_num, USB_IN, NULL, 1);
( (mem_type<<8) | (part_num) ), 1, USB_IN, NULL, 1);
// 0xAABB, buff_num, USB_IN, NULL, 1);
} }
/* Desc:Set buffer mapper and map_var /* 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, return dictionary_call( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR,
( (mapper<<8) | (map_var) ), buff_num, USB_IN, NULL, 1); ( (mapper<<8) | (map_var) ), buff_num, USB_IN, NULL, 1);
// 0xCCDD, buff_num, USB_IN, NULL, 1);
} }
/* Desc:Set buffer manager operation /* Desc:Set buffer manager operation

View File

@ -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 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 page_num to non-zero if offset arg sent
//set mem_type and part_num to designate how to get/write data //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, buff0, PRGROM, MASKROM ), "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, buff1, PRGROM, MASKROM ), "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");
//set multiple and add_mult only when flashing //set multiple and add_mult only when flashing
//set mapper, map_var, and function to designate read/write algo //set mapper, map_var, and function to designate read/write algo
//just dump visible NROM memory to start //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, 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, 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");
//tell buffers what function to use for dumping //tell buffers what function to use for dumping
//TODO when start implementing other mappers //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 //debugging print out buffer elements
get_buff_operation( transfer ); //get_buff_operation( transfer );
get_buff_elements( transfer, buff0 ); //get_buff_elements( transfer, buff0 );
get_buff_elements( transfer, buff1 ); //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 //inform buffer manager to start dumping operation now that buffers are initialized
check(! set_buff_operation( transfer, STARTDUMP ), "Unable to set buffer operation"); check(! set_buff_operation( transfer, STARTDUMP ), "Unable to set buffer operation");
get_buff_operation( transfer ); // get_buff_operation( transfer );
get_buff_elements( transfer, buff0 ); // get_buff_elements( transfer, buff0 );
get_buff_elements( transfer, buff1 ); // get_buff_elements( transfer, buff1 );
//manager updates buffer status' so they'll start dumping //manager updates buffer status' so they'll start dumping
//once they're full manager prepares them to be read back on USB payloads //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 //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 //buffer updates it's elements and goes off to dump next page
debug("first payload"); // debug("first payload");
check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); // check(! payload_in( transfer, data, buff_size ), "Error with payload IN");
check(! append_to_file( rom, data, buff_size ), "Error with file append"); // check(! append_to_file( rom, data, buff_size ), "Error with file append");
//
get_buff_operation( transfer ); // debug("first payload done");
get_buff_elements( transfer, buff0 ); // get_buff_operation( transfer );
get_buff_elements( transfer, buff1 ); // get_buff_elements( transfer, buff0 );
// get_buff_elements( transfer, buff1 );
debug("second payload"); //
check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); // debug("second payload");
check(! append_to_file( rom, data, buff_size ), "Error with file append"); // 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_operation( transfer );
get_buff_elements( transfer, buff1 ); // get_buff_elements( transfer, buff0 );
// get_buff_elements( transfer, buff1 );
//now just need to call series of payload IN transfers to retrieve data //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<(256*KByte/buff_size); i++) {
// for( i=0; i<(8*KByte/buff_size); i++) { for( i=0; i<(32*KByte/buff_size); i++) {
// //payload transfer in and append to file //for( i=0; i<(8*KByte/buff_size); i++) {
// if ( i % 32 == 0 ) debug("payload in #%d", i); //payload transfer in and append to file
// check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); if ( i % 256 == 0 ) debug("payload in #%d", i);
// check(! append_to_file( rom, data, buff_size ), "Error with file append"); 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"); debug("payload done");
//TODO flush file from time to time..? //TODO flush file from time to time..?

View File

@ -2,9 +2,126 @@
int test_function( USBtransfer *transfer ) int test_function( USBtransfer *transfer )
{ {
debug("testing"); 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"); //debug("uninit");
//get_buff_elements( transfer, 0 ); //get_buff_elements( transfer, 0 );
//get_buff_elements( transfer, 1 ); //get_buff_elements( transfer, 1 );
@ -327,7 +444,7 @@ int test_function( USBtransfer *transfer )
return 0; return 0;
error: //error:
return -1; // return -1;
} }

View File

@ -94,6 +94,7 @@ enum buff_mem_type {
#define STARTFLASH 0xF2 #define STARTFLASH 0xF2
#define FLASHED 0xF4 #define FLASHED 0xF4
#define FLASH_WAIT 0xF8 #define FLASH_WAIT 0xF8
#define STOPPED 0xFE
#define UNALLOC 0xFF #define UNALLOC 0xFF
#endif #endif