diff --git a/AxibugEmuOnline.Client/Assets/Resources/NES/ROMDB.asset b/AxibugEmuOnline.Client/Assets/Resources/NES/ROMDB.asset index 14aca02..3e8ce5d 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/NES/ROMDB.asset +++ b/AxibugEmuOnline.Client/Assets/Resources/NES/ROMDB.asset @@ -1131,8 +1131,6 @@ MonoBehaviour: Mapper: 16 - CRC: 3689736015 Mapper: 4 - - CRC: 3332613116 - Mapper: 552 - CRC: 2368142826 Mapper: 4 - CRC: 252051210 @@ -2099,14 +2097,8 @@ MonoBehaviour: Mapper: 4 - CRC: 3504682068 Mapper: 80 - - CRC: 1417547461 - Mapper: 552 - CRC: 3466812762 Mapper: 80 - - CRC: 2961287880 - Mapper: 552 - - CRC: 1924950293 - Mapper: 552 - CRC: 1048075715 Mapper: 1 - CRC: 3796759379 @@ -2293,14 +2285,6 @@ MonoBehaviour: Mapper: 157 - CRC: 4112154438 Mapper: 157 - - CRC: 2350801063 - Mapper: 547 - - CRC: 604254152 - Mapper: 547 - - CRC: 35522539 - Mapper: 547 - - CRC: 1479051584 - Mapper: 547 - CRC: 1029064535 Mapper: 0 - CRC: 315020743 @@ -3069,8 +3053,6 @@ MonoBehaviour: Mapper: 1 - CRC: 46938483 Mapper: 3 - - CRC: 492160415 - Mapper: 555 - CRC: 185471631 Mapper: 105 - CRC: 2720421882 @@ -4681,10 +4663,6 @@ MonoBehaviour: Mapper: 36 - CRC: 1909125271 Mapper: 0 - - CRC: 3101241854 - Mapper: 355 - - CRC: 1893666109 - Mapper: 334 - CRC: 3546338809 Mapper: 79 - CRC: 833393274 @@ -4713,10 +4691,6 @@ MonoBehaviour: Mapper: 152 - CRC: 3644052969 Mapper: 132 - - CRC: 815852867 - Mapper: 355 - - CRC: 502333826 - Mapper: 263 - CRC: 4139154401 Mapper: 0 - CRC: 2895309280 @@ -4725,8 +4699,6 @@ MonoBehaviour: Mapper: 150 - CRC: 1404773419 Mapper: 147 - - CRC: 1259576423 - Mapper: 405 - CRC: 3744576356 Mapper: 112 - CRC: 3700312511 @@ -4813,8 +4785,6 @@ MonoBehaviour: Mapper: 4 - CRC: 3983297862 Mapper: 116 - - CRC: 2700865582 - Mapper: 298 - CRC: 2096542474 Mapper: 0 - CRC: 3981273455 @@ -4833,8 +4803,6 @@ MonoBehaviour: Mapper: 0 - CRC: 356863154 Mapper: 143 - - CRC: 3321560620 - Mapper: 264 - CRC: 1627788114 Mapper: 112 - CRC: 4004290599 @@ -4861,8 +4829,6 @@ MonoBehaviour: Mapper: 91 - CRC: 4294008771 Mapper: 90 - - CRC: 3850782159 - Mapper: 264 - CRC: 1908030427 Mapper: 90 - CRC: 3807485415 @@ -4949,8 +4915,6 @@ MonoBehaviour: Mapper: 121 - CRC: 2914033650 Mapper: 187 - - CRC: 2715555520 - Mapper: 262 - CRC: 339604772 Mapper: 36 - CRC: 3643154414 @@ -4993,8 +4957,6 @@ MonoBehaviour: Mapper: 4 - CRC: 1276360144 Mapper: 187 - - CRC: 428435401 - Mapper: 263 - CRC: 3447390251 Mapper: 121 - CRC: 2434373183 @@ -5033,12 +4995,6 @@ MonoBehaviour: Mapper: 115 - CRC: 2880358774 Mapper: 90 - - CRC: 57673463 - Mapper: 512 - - CRC: 601898433 - Mapper: 553 - - CRC: 1910705012 - Mapper: 533 - CRC: 3320169906 Mapper: 115 - CRC: 485789425 @@ -5109,8 +5065,6 @@ MonoBehaviour: Mapper: 79 - CRC: 1083416864 Mapper: 243 - - CRC: 1291209776 - Mapper: 513 - CRC: 3722204856 Mapper: 240 - CRC: 125164648 @@ -5177,8 +5131,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2757931289 Mapper: 4 - - CRC: 575244761 - Mapper: 258 - CRC: 593188059 Mapper: 4 - CRC: 3476861537 @@ -5189,8 +5141,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2622162905 Mapper: 0 - - CRC: 1245646731 - Mapper: 268 - CRC: 2909997811 Mapper: 198 - CRC: 3925401628 @@ -5205,16 +5155,8 @@ MonoBehaviour: Mapper: 241 - CRC: 555553257 Mapper: 241 - - CRC: 2198589296 - Mapper: 268 - CRC: 3602604433 Mapper: 74 - - CRC: 3370575926 - Mapper: 542 - - CRC: 480887586 - Mapper: 258 - - CRC: 2358617759 - Mapper: 268 - CRC: 210222069 Mapper: 4 - CRC: 2306920680 @@ -5265,8 +5207,6 @@ MonoBehaviour: Mapper: 163 - CRC: 1152162958 Mapper: 163 - - CRC: 531890733 - Mapper: 268 - CRC: 4017857669 Mapper: 163 - CRC: 1403122742 @@ -5287,10 +5227,6 @@ MonoBehaviour: Mapper: 163 - CRC: 4162120791 Mapper: 178 - - CRC: 1341870319 - Mapper: 268 - - CRC: 900734945 - Mapper: 268 - CRC: 2686889554 Mapper: 163 - CRC: 3069651480 @@ -5303,10 +5239,6 @@ MonoBehaviour: Mapper: 163 - CRC: 2791790253 Mapper: 163 - - CRC: 2547688829 - Mapper: 268 - - CRC: 1059786287 - Mapper: 268 - CRC: 979447904 Mapper: 163 - CRC: 2356388987 @@ -5319,16 +5251,12 @@ MonoBehaviour: Mapper: 163 - CRC: 3229405902 Mapper: 163 - - CRC: 1240822156 - Mapper: 268 - CRC: 2453127680 Mapper: 163 - CRC: 1336945219 Mapper: 163 - CRC: 1389887000 Mapper: 163 - - CRC: 1717780584 - Mapper: 268 - CRC: 367333069 Mapper: 163 - CRC: 127528593 @@ -5339,14 +5267,10 @@ MonoBehaviour: Mapper: 163 - CRC: 2314513617 Mapper: 163 - - CRC: 399734174 - Mapper: 268 - CRC: 3148560993 Mapper: 163 - CRC: 1292559771 Mapper: 178 - - CRC: 2067813212 - Mapper: 268 - CRC: 1707490499 Mapper: 163 - CRC: 738319878 @@ -5357,12 +5281,8 @@ MonoBehaviour: Mapper: 178 - CRC: 2583599797 Mapper: 162 - - CRC: 662289217 - Mapper: 534 - CRC: 3054807714 Mapper: 163 - - CRC: 690774949 - Mapper: 268 - CRC: 2158071004 Mapper: 163 - CRC: 1196604766 @@ -5375,8 +5295,6 @@ MonoBehaviour: Mapper: 163 - CRC: 573182826 Mapper: 163 - - CRC: 4231220236 - Mapper: 268 - CRC: 3955679970 Mapper: 163 - CRC: 3498082258 @@ -5427,8 +5345,6 @@ MonoBehaviour: Mapper: 163 - CRC: 555866802 Mapper: 163 - - CRC: 4133132728 - Mapper: 268 - CRC: 2324648357 Mapper: 178 - CRC: 3824129849 @@ -5437,18 +5353,8 @@ MonoBehaviour: Mapper: 178 - CRC: 2421525317 Mapper: 178 - - CRC: 874866360 - Mapper: 268 - - CRC: 311383723 - Mapper: 268 - CRC: 2963736281 Mapper: 176 - - CRC: 4154855924 - Mapper: 268 - - CRC: 114328879 - Mapper: 268 - - CRC: 47031092 - Mapper: 519 - CRC: 1715419410 Mapper: 4 - CRC: 1591930775 @@ -5457,8 +5363,6 @@ MonoBehaviour: Mapper: 227 - CRC: 491065804 Mapper: 178 - - CRC: 643334596 - Mapper: 519 - CRC: 2623106760 Mapper: 4 - CRC: 1350027969 @@ -5473,8 +5377,6 @@ MonoBehaviour: Mapper: 4 - CRC: 150729712 Mapper: 162 - - CRC: 2336347292 - Mapper: 558 - CRC: 3959999542 Mapper: 178 - CRC: 3575501356 @@ -5503,8 +5405,6 @@ MonoBehaviour: Mapper: 249 - CRC: 1153565728 Mapper: 176 - - CRC: 1445129297 - Mapper: 558 - CRC: 2340349083 Mapper: 252 - CRC: 2415663204 @@ -5559,10 +5459,6 @@ MonoBehaviour: Mapper: 4 - CRC: 157124216 Mapper: 176 - - CRC: 3886985492 - Mapper: 558 - - CRC: 2394209105 - Mapper: 558 - CRC: 931126070 Mapper: 176 - CRC: 431613746 @@ -5615,8 +5511,6 @@ MonoBehaviour: Mapper: 176 - CRC: 4098117687 Mapper: 4 - - CRC: 1210336145 - Mapper: 558 - CRC: 742215408 Mapper: 176 - CRC: 2048501056 @@ -5625,8 +5519,6 @@ MonoBehaviour: Mapper: 176 - CRC: 49303968 Mapper: 249 - - CRC: 3116086725 - Mapper: 519 - CRC: 2836487105 Mapper: 192 - CRC: 2303175557 @@ -5657,8 +5549,6 @@ MonoBehaviour: Mapper: 4 - CRC: 1518908848 Mapper: 176 - - CRC: 2295031975 - Mapper: 558 - CRC: 1055824600 Mapper: 242 - CRC: 708516115 @@ -5717,8 +5607,6 @@ MonoBehaviour: Mapper: 176 - CRC: 2768315647 Mapper: 4 - - CRC: 136096511 - Mapper: 558 - CRC: 2725468431 Mapper: 4 - CRC: 1968675859 @@ -5835,12 +5723,6 @@ MonoBehaviour: Mapper: 177 - CRC: 4213926672 Mapper: 241 - - CRC: 311845671 - Mapper: 268 - - CRC: 3593780827 - Mapper: 268 - - CRC: 716111945 - Mapper: 268 - CRC: 3981156245 Mapper: 176 - CRC: 2811191108 @@ -5849,18 +5731,10 @@ MonoBehaviour: Mapper: 176 - CRC: 978695665 Mapper: 241 - - CRC: 2059340463 - Mapper: 268 - CRC: 2460043334 Mapper: 199 - - CRC: 2853713543 - Mapper: 268 - CRC: 4001434965 Mapper: 192 - - CRC: 3134471855 - Mapper: 268 - - CRC: 3339406009 - Mapper: 268 - CRC: 953964912 Mapper: 241 - CRC: 1963834440 @@ -5871,36 +5745,18 @@ MonoBehaviour: Mapper: 176 - CRC: 3051895962 Mapper: 177 - - CRC: 1292837603 - Mapper: 268 - - CRC: 3472937500 - Mapper: 268 - CRC: 2160762799 Mapper: 176 - - CRC: 2667745221 - Mapper: 268 - - CRC: 3824284010 - Mapper: 268 - CRC: 3274088600 Mapper: 176 - - CRC: 1936714692 - Mapper: 268 - - CRC: 1138707263 - Mapper: 268 - CRC: 2417299372 Mapper: 177 - - CRC: 2722331011 - Mapper: 268 - - CRC: 4036506548 - Mapper: 268 - CRC: 2461263264 Mapper: 177 - CRC: 855669607 Mapper: 177 - CRC: 3752673126 Mapper: 4 - - CRC: 2523132921 - Mapper: 268 - CRC: 2105821162 Mapper: 177 - CRC: 3647784798 @@ -5915,14 +5771,10 @@ MonoBehaviour: Mapper: 4 - CRC: 2745335537 Mapper: 253 - - CRC: 1238617641 - Mapper: 268 - CRC: 493643897 Mapper: 227 - CRC: 1181776279 Mapper: 253 - - CRC: 829691550 - Mapper: 534 - CRC: 2043624462 Mapper: 4 - CRC: 2858839065 @@ -5943,8 +5795,6 @@ MonoBehaviour: Mapper: 224 - CRC: 1294471623 Mapper: 224 - - CRC: 176004663 - Mapper: 551 - CRC: 611651165 Mapper: 224 - CRC: 3327702696 @@ -5961,8 +5811,6 @@ MonoBehaviour: Mapper: 224 - CRC: 3053302731 Mapper: 224 - - CRC: 3724553979 - Mapper: 268 - CRC: 1329754384 Mapper: 224 - CRC: 2758635340 @@ -5975,12 +5823,8 @@ MonoBehaviour: Mapper: 224 - CRC: 1560564860 Mapper: 224 - - CRC: 1411472365 - Mapper: 523 - CRC: 3411168066 Mapper: 224 - - CRC: 1601054743 - Mapper: 551 - CRC: 1597383064 Mapper: 224 - CRC: 1174853958 @@ -5993,18 +5837,10 @@ MonoBehaviour: Mapper: 224 - CRC: 3167845405 Mapper: 224 - - CRC: 3477590825 - Mapper: 268 - CRC: 2764281141 Mapper: 224 - - CRC: 3565762726 - Mapper: 268 - - CRC: 2222398300 - Mapper: 551 - CRC: 1019556082 Mapper: 240 - - CRC: 1363344245 - Mapper: 551 - CRC: 1992026390 Mapper: 224 - CRC: 2605813076 @@ -6029,12 +5865,8 @@ MonoBehaviour: Mapper: 164 - CRC: 228325186 Mapper: 4 - - CRC: 579164583 - Mapper: 558 - CRC: 3161809574 Mapper: 164 - - CRC: 3864693768 - Mapper: 558 - CRC: 2181675641 Mapper: 164 - CRC: 540638822 @@ -6061,14 +5893,10 @@ MonoBehaviour: Mapper: 178 - CRC: 1299278055 Mapper: 178 - - CRC: 27411201 - Mapper: 558 - CRC: 4213531601 Mapper: 176 - CRC: 1488289789 Mapper: 4 - - CRC: 3549652401 - Mapper: 544 - CRC: 3046266952 Mapper: 253 - CRC: 2971773021 @@ -6357,8 +6185,6 @@ MonoBehaviour: Mapper: 3 - CRC: 4021467112 Mapper: 0 - - CRC: 481201647 - Mapper: 290 - CRC: 2421920758 Mapper: 0 - CRC: 4068718218 @@ -6377,8 +6203,6 @@ MonoBehaviour: Mapper: 3 - CRC: 841785194 Mapper: 3 - - CRC: 2693149432 - Mapper: 292 - CRC: 4280086442 Mapper: 0 - CRC: 801023597 @@ -6489,8 +6313,6 @@ MonoBehaviour: Mapper: 4 - CRC: 1644218013 Mapper: 0 - - CRC: 1397150176 - Mapper: 328 - CRC: 3939763543 Mapper: 0 - CRC: 1525660820 @@ -6509,16 +6331,6 @@ MonoBehaviour: Mapper: 11 - CRC: 2260617030 Mapper: 2 - - CRC: 2096619417 - Mapper: 515 - - CRC: 119515218 - Mapper: 515 - - CRC: 3390350698 - Mapper: 515 - - CRC: 3806196259 - Mapper: 515 - - CRC: 2541748989 - Mapper: 515 - CRC: 242672833 Mapper: 190 - CRC: 3966603534 @@ -6531,188 +6343,18 @@ MonoBehaviour: Mapper: 206 - CRC: 3511043172 Mapper: 156 - - CRC: 986324614 - Mapper: 517 - CRC: 2645039352 Mapper: 11 - CRC: 807226040 Mapper: 150 - - CRC: 1111759624 - Mapper: 516 - - CRC: 3173422328 - Mapper: 516 - - CRC: 4183227626 - Mapper: 521 - CRC: 2259814065 Mapper: 156 - - CRC: 2547123729 - Mapper: 256 - - CRC: 3800768248 - Mapper: 256 - - CRC: 865221013 - Mapper: 256 - - CRC: 494271797 - Mapper: 256 - - CRC: 243419815 - Mapper: 256 - - CRC: 4242188028 - Mapper: 256 - - CRC: 751638683 - Mapper: 256 - - CRC: 2999853307 - Mapper: 256 - - CRC: 4050304889 - Mapper: 405 - - CRC: 3662517379 - Mapper: 534 - - CRC: 3808146738 - Mapper: 405 - - CRC: 617087703 - Mapper: 270 - - CRC: 616006811 - Mapper: 426 - - CRC: 4145252736 - Mapper: 256 - - CRC: 1234924603 - Mapper: 256 - - CRC: 2128219537 - Mapper: 256 - - CRC: 402340539 - Mapper: 256 - - CRC: 3465864506 - Mapper: 256 - - CRC: 412373883 - Mapper: 256 - - CRC: 3864669242 - Mapper: 256 - - CRC: 1786566900 - Mapper: 256 - - CRC: 2594950031 - Mapper: 256 - - CRC: 3435149909 - Mapper: 256 - - CRC: 2171865226 - Mapper: 296 - - CRC: 3177056333 - Mapper: 296 - - CRC: 2458665389 - Mapper: 296 - - CRC: 2408353191 - Mapper: 296 - - CRC: 520902468 - Mapper: 423 - - CRC: 1340140802 - Mapper: 425 - - CRC: 2610280722 - Mapper: 256 - - CRC: 3175330234 - Mapper: 256 - - CRC: 1466789039 - Mapper: 405 - - CRC: 2639383036 - Mapper: 256 - - CRC: 294613638 - Mapper: 256 - - CRC: 2503146360 - Mapper: 256 - - CRC: 2498921723 - Mapper: 256 - - CRC: 2361592391 - Mapper: 256 - - CRC: 936442630 - Mapper: 270 - - CRC: 2608479830 - Mapper: 256 - - CRC: 2821295155 - Mapper: 256 - - CRC: 2340629515 - Mapper: 419 - - CRC: 2528057755 - Mapper: 419 - - CRC: 3859767009 - Mapper: 419 - - CRC: 42129781 - Mapper: 269 - CRC: 3940024369 Mapper: 126 - - CRC: 1901946542 - Mapper: 405 - - CRC: 437611165 - Mapper: 256 - - CRC: 2611290324 - Mapper: 256 - - CRC: 2625628671 - Mapper: 405 - - CRC: 2864957119 - Mapper: 423 - - CRC: 3421842525 - Mapper: 423 - - CRC: 995878757 - Mapper: 256 - CRC: 3648432132 Mapper: 242 - CRC: 560037926 Mapper: 227 - - CRC: 3128267814 - Mapper: 412 - - CRC: 422611241 - Mapper: 534 - - CRC: 301944999 - Mapper: 256 - - CRC: 1196449361 - Mapper: 408 - - CRC: 3024450013 - Mapper: 256 - - CRC: 1909347789 - Mapper: 423 - - CRC: 1211786899 - Mapper: 423 - - CRC: 3499252445 - Mapper: 423 - - CRC: 1847343658 - Mapper: 423 - - CRC: 2336957744 - Mapper: 423 - - CRC: 3516240718 - Mapper: 423 - - CRC: 3599296950 - Mapper: 423 - - CRC: 1795563975 - Mapper: 423 - - CRC: 269317139 - Mapper: 256 - - CRC: 1254859317 - Mapper: 423 - - CRC: 886932075 - Mapper: 423 - - CRC: 2401061613 - Mapper: 423 - - CRC: 1958156358 - Mapper: 256 - - CRC: 610077907 - Mapper: 427 - - CRC: 4184628226 - Mapper: 256 - - CRC: 3893568035 - Mapper: 427 - - CRC: 1345730636 - Mapper: 424 - - CRC: 286101034 - Mapper: 424 - - CRC: 4114063443 - Mapper: 256 - - CRC: 1012800310 - Mapper: 427 - - CRC: 331038412 - Mapper: 256 - - CRC: 3332035914 - Mapper: 256 - - CRC: 2710979818 - Mapper: 256 - - CRC: 3043129469 - Mapper: 256 - - CRC: 3409987796 - Mapper: 296 - CRC: 64402648 Mapper: 227 - CRC: 3063400750 @@ -6721,310 +6363,58 @@ MonoBehaviour: Mapper: 45 - CRC: 1875624713 Mapper: 126 - - CRC: 3518737876 - Mapper: 256 - - CRC: 2491074712 - Mapper: 256 - - CRC: 448025128 - Mapper: 256 - - CRC: 2005975578 - Mapper: 256 - - CRC: 3904225212 - Mapper: 256 - - CRC: 1783088800 - Mapper: 256 - - CRC: 201985741 - Mapper: 425 - - CRC: 4152578134 - Mapper: 426 - - CRC: 3393968456 - Mapper: 256 - - CRC: 3288321736 - Mapper: 256 - - CRC: 3112144101 - Mapper: 256 - - CRC: 3187647498 - Mapper: 270 - - CRC: 3377732575 - Mapper: 256 - - CRC: 2763970539 - Mapper: 256 - - CRC: 3155074843 - Mapper: 296 - - CRC: 1801132570 - Mapper: 256 - - CRC: 1265378995 - Mapper: 270 - - CRC: 1274648859 - Mapper: 270 - CRC: 2468438649 Mapper: 46 - - CRC: 2108460798 - Mapper: 256 - - CRC: 2956859428 - Mapper: 256 - - CRC: 3990817960 - Mapper: 256 - - CRC: 66188469 - Mapper: 256 - - CRC: 705030575 - Mapper: 405 - - CRC: 3822645839 - Mapper: 405 - - CRC: 2388140696 - Mapper: 405 - - CRC: 1917888567 - Mapper: 256 - - CRC: 1899582926 - Mapper: 405 - - CRC: 4093430713 - Mapper: 256 - - CRC: 251467301 - Mapper: 405 - - CRC: 3783133037 - Mapper: 256 - - CRC: 2939574903 - Mapper: 256 - - CRC: 1967186768 - Mapper: 256 - - CRC: 3030321541 - Mapper: 256 - - CRC: 1413301646 - Mapper: 256 - - CRC: 306371199 - Mapper: 256 - - CRC: 1915536237 - Mapper: 256 - - CRC: 3111783879 - Mapper: 256 - CRC: 3106188838 Mapper: 124 - - CRC: 1016508849 - Mapper: 256 - CRC: 1770748488 Mapper: 241 - - CRC: 2987000762 - Mapper: 427 - - CRC: 2920875474 - Mapper: 256 - - CRC: 3295489193 - Mapper: 425 - - CRC: 3568615276 - Mapper: 256 - - CRC: 3808135788 - Mapper: 256 - - CRC: 716274367 - Mapper: 256 - - CRC: 4210444300 - Mapper: 405 - - CRC: 4013600227 - Mapper: 256 - - CRC: 1064871002 - Mapper: 256 - - CRC: 2702317635 - Mapper: 256 - - CRC: 2218144966 - Mapper: 256 - - CRC: 2582591864 - Mapper: 256 - - CRC: 2575318651 - Mapper: 256 - - CRC: 515244968 - Mapper: 256 - - CRC: 1435569144 - Mapper: 407 - - CRC: 3086490719 - Mapper: 256 - - CRC: 3018885551 - Mapper: 256 - - CRC: 2976761463 - Mapper: 256 - - CRC: 2349537355 - Mapper: 419 - - CRC: 4112791597 - Mapper: 256 - - CRC: 1376792035 - Mapper: 256 - - CRC: 1590904923 - Mapper: 256 - - CRC: 262789549 - Mapper: 256 - - CRC: 4254482324 - Mapper: 256 - - CRC: 2974728894 - Mapper: 256 - CRC: 2942908254 Mapper: 0 - - CRC: 3142213603 - Mapper: 256 - - CRC: 2425220059 - Mapper: 256 - - CRC: 1634219289 - Mapper: 256 - CRC: 333016255 Mapper: 4 - - CRC: 2926162302 - Mapper: 256 - CRC: 777480393 Mapper: 0 - - CRC: 3707302354 - Mapper: 256 - CRC: 665641779 Mapper: 0 - - CRC: 1536460534 - Mapper: 256 - - CRC: 2831139479 - Mapper: 256 - - CRC: 3117187376 - Mapper: 256 - - CRC: 3417885122 - Mapper: 256 - - CRC: 129319581 - Mapper: 256 - - CRC: 3922823080 - Mapper: 256 - - CRC: 1320816197 - Mapper: 256 - - CRC: 2247041342 - Mapper: 256 - - CRC: 3356923299 - Mapper: 256 - CRC: 160154005 Mapper: 4 - - CRC: 3001606378 - Mapper: 256 - - CRC: 3680064843 - Mapper: 256 - CRC: 2903736799 Mapper: 0 - - CRC: 1606063872 - Mapper: 256 - - CRC: 1356004169 - Mapper: 256 - CRC: 1328799565 Mapper: 0 - - CRC: 2073859042 - Mapper: 256 - - CRC: 1052278311 - Mapper: 256 - CRC: 2318970400 Mapper: 0 - - CRC: 1176874773 - Mapper: 256 - - CRC: 3917573928 - Mapper: 256 - - CRC: 2237983386 - Mapper: 256 - - CRC: 859661777 - Mapper: 256 - CRC: 471117254 Mapper: 4 - - CRC: 3185421477 - Mapper: 256 - CRC: 3346226516 Mapper: 0 - - CRC: 4198277683 - Mapper: 256 - - CRC: 3461537017 - Mapper: 256 - - CRC: 1800307563 - Mapper: 256 - - CRC: 2018525041 - Mapper: 256 - - CRC: 3535379422 - Mapper: 256 - - CRC: 2615933817 - Mapper: 256 - - CRC: 3835998027 - Mapper: 256 - CRC: 2960223426 Mapper: 4 - - CRC: 1301708080 - Mapper: 256 - CRC: 1841566239 Mapper: 0 - - CRC: 426061266 - Mapper: 256 - CRC: 1008737740 Mapper: 4 - CRC: 2490011280 Mapper: 4 - - CRC: 1667590022 - Mapper: 256 - CRC: 2612589648 Mapper: 4 - - CRC: 877305375 - Mapper: 256 - - CRC: 1823829490 - Mapper: 256 - CRC: 4113026456 Mapper: 4 - CRC: 3803290827 Mapper: 0 - CRC: 1385997252 Mapper: 0 - - CRC: 5232150 - Mapper: 256 - - CRC: 3971721892 - Mapper: 256 - - CRC: 269428576 - Mapper: 256 - - CRC: 969828021 - Mapper: 256 - - CRC: 3804042587 - Mapper: 256 - CRC: 2469715547 Mapper: 0 - - CRC: 1576617510 - Mapper: 256 - CRC: 798349099 Mapper: 4 - - CRC: 4057743043 - Mapper: 256 - - CRC: 2657013337 - Mapper: 256 - - CRC: 868767605 - Mapper: 256 - - CRC: 3048898284 - Mapper: 256 - - CRC: 4036479838 - Mapper: 256 - - CRC: 242785981 - Mapper: 256 - - CRC: 1008747317 - Mapper: 256 - - CRC: 1408236215 - Mapper: 256 - - CRC: 867976951 - Mapper: 256 - - CRC: 392309242 - Mapper: 256 - CRC: 3518570276 Mapper: 0 - CRC: 1155309404 Mapper: 4 - - CRC: 742359774 - Mapper: 256 - - CRC: 2049856697 - Mapper: 256 - - CRC: 3178244501 - Mapper: 256 - - CRC: 3543306829 - Mapper: 256 - CRC: 3245413396 Mapper: 0 - - CRC: 2985765203 - Mapper: 256 - - CRC: 2962837146 - Mapper: 256 - - CRC: 1631759880 - Mapper: 256 - - CRC: 260352469 - Mapper: 256 - - CRC: 1940096490 - Mapper: 256 - - CRC: 2154073322 - Mapper: 256 - CRC: 420842717 Mapper: 0 - CRC: 3783758456 @@ -7035,44 +6425,14 @@ MonoBehaviour: Mapper: 4 - CRC: 1286524285 Mapper: 4 - - CRC: 848752524 - Mapper: 256 - - CRC: 2790362001 - Mapper: 256 - CRC: 544059928 Mapper: 4 - - CRC: 3323110149 - Mapper: 256 - - CRC: 2898642405 - Mapper: 256 - - CRC: 1899214975 - Mapper: 256 - - CRC: 3686232336 - Mapper: 256 - CRC: 2167139703 Mapper: 0 - - CRC: 3423487640 - Mapper: 256 - - CRC: 1486669146 - Mapper: 256 - - CRC: 2340473279 - Mapper: 256 - - CRC: 3806112578 - Mapper: 256 - - CRC: 3033871208 - Mapper: 256 - - CRC: 3315314125 - Mapper: 256 - CRC: 2038548322 Mapper: 4 - CRC: 2254383684 Mapper: 4 - - CRC: 3093976981 - Mapper: 256 - - CRC: 1548648069 - Mapper: 256 - - CRC: 197373689 - Mapper: 256 - CRC: 2705276204 Mapper: 4 - CRC: 4220819148 @@ -7081,186 +6441,46 @@ MonoBehaviour: Mapper: 4 - CRC: 902141622 Mapper: 4 - - CRC: 1405030315 - Mapper: 256 - CRC: 2571891230 Mapper: 0 - - CRC: 1652124173 - Mapper: 256 - - CRC: 1997073340 - Mapper: 256 - - CRC: 2497372015 - Mapper: 256 - - CRC: 3932297619 - Mapper: 256 - CRC: 16896342 Mapper: 0 - - CRC: 940150419 - Mapper: 256 - - CRC: 4200573866 - Mapper: 256 - - CRC: 2045142082 - Mapper: 256 - - CRC: 786192968 - Mapper: 256 - CRC: 2245696583 Mapper: 4 - - CRC: 769898492 - Mapper: 256 - - CRC: 1192438095 - Mapper: 256 - CRC: 3640900082 Mapper: 0 - CRC: 710287169 Mapper: 4 - - CRC: 666162034 - Mapper: 256 - - CRC: 372732918 - Mapper: 256 - CRC: 1151781383 Mapper: 4 - - CRC: 4051177227 - Mapper: 256 - CRC: 653495340 Mapper: 4 - - CRC: 4104022238 - Mapper: 256 - - CRC: 893724023 - Mapper: 256 - - CRC: 2097926852 - Mapper: 256 - - CRC: 532506385 - Mapper: 256 - - CRC: 4259837378 - Mapper: 256 - - CRC: 198360258 - Mapper: 256 - CRC: 4145721776 Mapper: 4 - - CRC: 3004448076 - Mapper: 256 - CRC: 247925884 Mapper: 4 - - CRC: 2883066710 - Mapper: 256 - - CRC: 1978522987 - Mapper: 256 - - CRC: 1812039735 - Mapper: 256 - - CRC: 109604096 - Mapper: 256 - - CRC: 1566210267 - Mapper: 256 - - CRC: 2732974959 - Mapper: 256 - - CRC: 4094611695 - Mapper: 256 - - CRC: 2457275068 - Mapper: 256 - - CRC: 2839906616 - Mapper: 256 - CRC: 3295599122 Mapper: 4 - - CRC: 3434912009 - Mapper: 256 - - CRC: 3526712076 - Mapper: 256 - - CRC: 2039211496 - Mapper: 256 - - CRC: 3202126753 - Mapper: 256 - - CRC: 993082074 - Mapper: 256 - - CRC: 1956818794 - Mapper: 256 - - CRC: 4268415512 - Mapper: 256 - - CRC: 2795348333 - Mapper: 256 - - CRC: 1884293542 - Mapper: 256 - - CRC: 146731842 - Mapper: 256 - CRC: 277402008 Mapper: 0 - - CRC: 2993447973 - Mapper: 256 - CRC: 2452770137 Mapper: 4 - - CRC: 3153560092 - Mapper: 256 - - CRC: 3967447131 - Mapper: 256 - CRC: 368645007 Mapper: 4 - - CRC: 2602174910 - Mapper: 256 - - CRC: 103036975 - Mapper: 256 - CRC: 3756978242 Mapper: 4 - - CRC: 3474479926 - Mapper: 256 - CRC: 3225597445 Mapper: 4 - - CRC: 1367630670 - Mapper: 256 - CRC: 2496511026 Mapper: 4 - CRC: 2566331312 Mapper: 4 - - CRC: 1349540133 - Mapper: 256 - - CRC: 1935418980 - Mapper: 256 - - CRC: 1025495580 - Mapper: 256 - - CRC: 2406864906 - Mapper: 256 - CRC: 1241327719 Mapper: 4 - - CRC: 1291452825 - Mapper: 256 - - CRC: 3391268741 - Mapper: 256 - CRC: 2346188275 Mapper: 4 - - CRC: 3150363887 - Mapper: 256 - - CRC: 3722066030 - Mapper: 256 - - CRC: 593703583 - Mapper: 256 - - CRC: 2758659289 - Mapper: 256 - - CRC: 3120312530 - Mapper: 256 - - CRC: 2356098028 - Mapper: 256 - - CRC: 914963217 - Mapper: 256 - - CRC: 89028689 - Mapper: 256 - - CRC: 3369331924 - Mapper: 256 - - CRC: 4181039683 - Mapper: 256 - - CRC: 1526750305 - Mapper: 256 - - CRC: 3178568094 - Mapper: 256 - - CRC: 327090767 - Mapper: 256 - - CRC: 3205589579 - Mapper: 256 - - CRC: 2310392952 - Mapper: 256 - - CRC: 2547844309 - Mapper: 256 - CRC: 2920974505 Mapper: 34 - - CRC: 3093639832 - Mapper: 365 - CRC: 2228591192 Mapper: 0 - CRC: 2407208553 @@ -7277,14 +6497,8 @@ MonoBehaviour: Mapper: 178 - CRC: 1832354848 Mapper: 178 - - CRC: 3347179126 - Mapper: 442 - - CRC: 289142073 - Mapper: 534 - CRC: 4264654427 Mapper: 164 - - CRC: 3259573415 - Mapper: 440 - CRC: 4123036415 Mapper: 241 - CRC: 3232195624 @@ -7315,8 +6529,6 @@ MonoBehaviour: Mapper: 241 - CRC: 1721381618 Mapper: 241 - - CRC: 177735854 - Mapper: 514 - CRC: 177416629 Mapper: 241 - CRC: 352682641 @@ -7327,22 +6539,12 @@ MonoBehaviour: Mapper: 241 - CRC: 1106221764 Mapper: 167 - - CRC: 4258869788 - Mapper: 518 - - CRC: 3394246406 - Mapper: 518 - - CRC: 1084540276 - Mapper: 518 - CRC: 2231797777 Mapper: 241 - CRC: 4119290320 Mapper: 177 - CRC: 1870923629 Mapper: 178 - - CRC: 316021992 - Mapper: 518 - - CRC: 1600729367 - Mapper: 518 - CRC: 4052468280 Mapper: 178 - CRC: 1577531931 @@ -7355,10 +6557,6 @@ MonoBehaviour: Mapper: 241 - CRC: 2073402546 Mapper: 178 - - CRC: 2792302344 - Mapper: 560 - - CRC: 3980953056 - Mapper: 531 - CRC: 2613325393 Mapper: 4 - CRC: 1294748809 @@ -7381,52 +6579,12 @@ MonoBehaviour: Mapper: 242 - CRC: 675087417 Mapper: 176 - - CRC: 3795586118 - Mapper: 319 - - CRC: 1558958787 - Mapper: 319 - - CRC: 4255892825 - Mapper: 319 - - CRC: 2225609301 - Mapper: 319 - - CRC: 2238317509 - Mapper: 319 - CRC: 2560302900 Mapper: 176 - CRC: 3802452001 Mapper: 176 - - CRC: 765464445 - Mapper: 319 - - CRC: 2293474150 - Mapper: 319 - - CRC: 1462023371 - Mapper: 319 - - CRC: 3113608890 - Mapper: 319 - - CRC: 2334514768 - Mapper: 319 - - CRC: 503571849 - Mapper: 319 - - CRC: 625461617 - Mapper: 319 - - CRC: 541718116 - Mapper: 315 - - CRC: 1787451662 - Mapper: 319 - - CRC: 3253522329 - Mapper: 319 - - CRC: 3736196198 - Mapper: 428 - - CRC: 416171912 - Mapper: 428 - CRC: 1492420949 Mapper: 45 - - CRC: 1155822538 - Mapper: 428 - - CRC: 2010946187 - Mapper: 434 - - CRC: 1821064414 - Mapper: 434 - CRC: 3839742923 Mapper: 134 - CRC: 1271554122 @@ -7487,26 +6645,8 @@ MonoBehaviour: Mapper: 176 - CRC: 3733341303 Mapper: 52 - - CRC: 698928022 - Mapper: 269 - - CRC: 89470359 - Mapper: 265 - - CRC: 306801151 - Mapper: 265 - - CRC: 2519393952 - Mapper: 265 - CRC: 2024374222 Mapper: 229 - - CRC: 3620181209 - Mapper: 265 - - CRC: 1623331743 - Mapper: 265 - - CRC: 3999444018 - Mapper: 320 - - CRC: 3640104629 - Mapper: 382 - - CRC: 2011819670 - Mapper: 265 - CRC: 848840454 Mapper: 176 - CRC: 29508206 @@ -7519,8 +6659,6 @@ MonoBehaviour: Mapper: 52 - CRC: 265013079 Mapper: 52 - - CRC: 3912524374 - Mapper: 428 - CRC: 242782596 Mapper: 134 - CRC: 1460674680 @@ -7563,8 +6701,6 @@ MonoBehaviour: Mapper: 134 - CRC: 4027935666 Mapper: 176 - - CRC: 2469759134 - Mapper: 436 - CRC: 1793967925 Mapper: 176 - CRC: 3587228748 @@ -7573,10 +6709,6 @@ MonoBehaviour: Mapper: 45 - CRC: 1817696285 Mapper: 45 - - CRC: 4196408577 - Mapper: 445 - - CRC: 92569962 - Mapper: 422 - CRC: 3250531780 Mapper: 45 - CRC: 564976035 @@ -7599,8 +6731,6 @@ MonoBehaviour: Mapper: 176 - CRC: 3545464592 Mapper: 176 - - CRC: 765374428 - Mapper: 391 - CRC: 28569042 Mapper: 176 - CRC: 689918744 @@ -7609,12 +6739,6 @@ MonoBehaviour: Mapper: 176 - CRC: 2972502933 Mapper: 176 - - CRC: 1242710016 - Mapper: 286 - - CRC: 512054878 - Mapper: 286 - - CRC: 392074215 - Mapper: 286 - CRC: 3962864144 Mapper: 176 - CRC: 3576175859 @@ -7673,58 +6797,30 @@ MonoBehaviour: Mapper: 176 - CRC: 2346804508 Mapper: 176 - - CRC: 2130409478 - Mapper: 319 - CRC: 1101089158 Mapper: 63 - CRC: 2204979966 Mapper: 57 - - CRC: 1885451282 - Mapper: 313 - CRC: 505254767 Mapper: 45 - - CRC: 960248668 - Mapper: 265 - - CRC: 1496333325 - Mapper: 256 - - CRC: 4147468904 - Mapper: 453 - - CRC: 792776569 - Mapper: 439 - - CRC: 2304901010 - Mapper: 439 - CRC: 343130522 Mapper: 178 - CRC: 3301890564 Mapper: 178 - CRC: 1293917278 Mapper: 178 - - CRC: 3632186915 - Mapper: 439 - - CRC: 2159664723 - Mapper: 439 - - CRC: 865254965 - Mapper: 430 - CRC: 543972186 Mapper: 128 - - CRC: 2636178504 - Mapper: 265 - CRC: 3618365324 Mapper: 176 - CRC: 385857033 Mapper: 242 - - CRC: 167489426 - Mapper: 348 - CRC: 1839308617 Mapper: 242 - - CRC: 594852282 - Mapper: 289 - CRC: 3320314421 Mapper: 52 - CRC: 2167185223 Mapper: 52 - - CRC: 2495963897 - Mapper: 374 - CRC: 2511120295 Mapper: 176 - CRC: 3864063121 @@ -7789,12 +6885,6 @@ MonoBehaviour: Mapper: 176 - CRC: 1870093338 Mapper: 176 - - CRC: 3502977321 - Mapper: 428 - - CRC: 1309261095 - Mapper: 393 - - CRC: 4011567694 - Mapper: 349 - CRC: 2881840610 Mapper: 58 - CRC: 1855616943 @@ -7961,8 +7051,6 @@ MonoBehaviour: Mapper: 45 - CRC: 3880847339 Mapper: 215 - - CRC: 1468596605 - Mapper: 422 - CRC: 2516634000 Mapper: 45 - CRC: 1487396849 @@ -7987,50 +7075,14 @@ MonoBehaviour: Mapper: 45 - CRC: 2260424401 Mapper: 45 - - CRC: 2311078169 - Mapper: 344 - - CRC: 861340730 - Mapper: 396 - - CRC: 3938419435 - Mapper: 333 - CRC: 250487882 Mapper: 52 - - CRC: 2555689477 - Mapper: 265 - - CRC: 943573560 - Mapper: 332 - - CRC: 3051451222 - Mapper: 332 - - CRC: 3413170202 - Mapper: 332 - - CRC: 3016391886 - Mapper: 332 - - CRC: 2056881806 - Mapper: 332 - - CRC: 958250179 - Mapper: 332 - - CRC: 4251263781 - Mapper: 332 - - CRC: 964180260 - Mapper: 332 - - CRC: 3046805218 - Mapper: 332 - - CRC: 3277445213 - Mapper: 332 - - CRC: 2535956071 - Mapper: 332 - - CRC: 1780013823 - Mapper: 268 - - CRC: 809578428 - Mapper: 260 - CRC: 1795649427 Mapper: 45 - CRC: 2964174699 Mapper: 205 - CRC: 3281067614 Mapper: 134 - - CRC: 2184029057 - Mapper: 285 - CRC: 2948203318 Mapper: 45 - CRC: 2842691940 @@ -8045,40 +7097,20 @@ MonoBehaviour: Mapper: 45 - CRC: 2306782586 Mapper: 45 - - CRC: 1555639684 - Mapper: 339 - CRC: 25842011 Mapper: 45 - - CRC: 2482170084 - Mapper: 438 - CRC: 804221185 Mapper: 45 - CRC: 1325035568 Mapper: 45 - - CRC: 1174059479 - Mapper: 454 - CRC: 1435250303 Mapper: 45 - CRC: 4280365641 Mapper: 45 - CRC: 677403419 Mapper: 45 - - CRC: 3513654649 - Mapper: 322 - - CRC: 3744100807 - Mapper: 340 - - CRC: 3543190910 - Mapper: 336 - CRC: 1754246923 Mapper: 242 - - CRC: 2002486576 - Mapper: 287 - - CRC: 1404593264 - Mapper: 458 - - CRC: 4139372680 - Mapper: 366 - - CRC: 1345676978 - Mapper: 366 - CRC: 379690425 Mapper: 176 - CRC: 809063242 @@ -8111,8 +7143,6 @@ MonoBehaviour: Mapper: 45 - CRC: 28435124 Mapper: 45 - - CRC: 2912364139 - Mapper: 314 - CRC: 3383417312 Mapper: 45 - CRC: 399784697 @@ -8169,12 +7199,6 @@ MonoBehaviour: Mapper: 176 - CRC: 3146930366 Mapper: 176 - - CRC: 599835429 - Mapper: 269 - - CRC: 1231925147 - Mapper: 428 - - CRC: 820222662 - Mapper: 319 - CRC: 1665394342 Mapper: 176 - CRC: 3468158223 @@ -8195,28 +7219,16 @@ MonoBehaviour: Mapper: 176 - CRC: 822063222 Mapper: 176 - - CRC: 684551183 - Mapper: 319 - CRC: 1475113698 Mapper: 176 - CRC: 1272971249 Mapper: 58 - CRC: 346189639 Mapper: 58 - - CRC: 2178012486 - Mapper: 319 - - CRC: 2035321412 - Mapper: 319 - - CRC: 1959598347 - Mapper: 319 - - CRC: 2534792076 - Mapper: 319 - CRC: 404655374 Mapper: 58 - CRC: 2451453330 Mapper: 58 - - CRC: 126303743 - Mapper: 319 - CRC: 148622455 Mapper: 176 - CRC: 4039475635 @@ -8317,28 +7329,14 @@ MonoBehaviour: Mapper: 176 - CRC: 1377499259 Mapper: 176 - - CRC: 3067948189 - Mapper: 260 - CRC: 2852504978 Mapper: 176 - - CRC: 3521456951 - Mapper: 260 - CRC: 542961779 Mapper: 176 - CRC: 3557355708 Mapper: 176 - - CRC: 1446558297 - Mapper: 260 - CRC: 542984046 Mapper: 176 - - CRC: 468185738 - Mapper: 429 - - CRC: 3467830210 - Mapper: 348 - - CRC: 2960937025 - Mapper: 348 - - CRC: 144451933 - Mapper: 348 - CRC: 3685667417 Mapper: 176 - CRC: 2384135822 @@ -8357,12 +7355,6 @@ MonoBehaviour: Mapper: 200 - CRC: 819926292 Mapper: 212 - - CRC: 3016510758 - Mapper: 297 - - CRC: 431008241 - Mapper: 299 - - CRC: 4177206402 - Mapper: 271 - CRC: 187496255 Mapper: 176 - CRC: 756835962 @@ -8377,24 +7369,12 @@ MonoBehaviour: Mapper: 176 - CRC: 3896399654 Mapper: 176 - - CRC: 3701497450 - Mapper: 441 - CRC: 3670085228 Mapper: 52 - CRC: 2554859079 Mapper: 52 - CRC: 98536577 Mapper: 52 - - CRC: 3022852796 - Mapper: 285 - - CRC: 575168880 - Mapper: 285 - - CRC: 805278991 - Mapper: 331 - - CRC: 3812216791 - Mapper: 319 - - CRC: 394694287 - Mapper: 380 - CRC: 1245675341 Mapper: 59 - CRC: 1236084024 @@ -8409,8 +7389,6 @@ MonoBehaviour: Mapper: 63 - CRC: 2346771474 Mapper: 63 - - CRC: 3703425820 - Mapper: 261 - CRC: 587441854 Mapper: 63 - CRC: 1614223871 @@ -8429,40 +7407,22 @@ MonoBehaviour: Mapper: 221 - CRC: 3569756875 Mapper: 174 - - CRC: 2728783028 - Mapper: 385 - CRC: 1326900051 Mapper: 221 - CRC: 458279647 Mapper: 221 - - CRC: 3343792723 - Mapper: 437 - CRC: 2821800557 Mapper: 221 - CRC: 1274225276 Mapper: 63 - CRC: 2708864909 Mapper: 221 - - CRC: 351576423 - Mapper: 377 - - CRC: 1520581141 - Mapper: 361 - CRC: 692136841 Mapper: 45 - CRC: 3400962658 Mapper: 45 - CRC: 2954530118 Mapper: 57 - - CRC: 2917179562 - Mapper: 403 - - CRC: 3546081671 - Mapper: 416 - - CRC: 3671636618 - Mapper: 274 - - CRC: 975194254 - Mapper: 274 - - CRC: 3733005951 - Mapper: 274 - CRC: 2160839371 Mapper: 235 - CRC: 3538365172 @@ -8479,14 +7439,6 @@ MonoBehaviour: Mapper: 235 - CRC: 1314285737 Mapper: 235 - - CRC: 2363391161 - Mapper: 283 - - CRC: 4212928547 - Mapper: 283 - - CRC: 179496998 - Mapper: 283 - - CRC: 4205553336 - Mapper: 283 - CRC: 3236232949 Mapper: 61 - CRC: 2696991560 @@ -8503,20 +7455,10 @@ MonoBehaviour: Mapper: 236 - CRC: 563285015 Mapper: 236 - - CRC: 725087535 - Mapper: 444 - - CRC: 794052658 - Mapper: 433 - - CRC: 1256844925 - Mapper: 301 - CRC: 1420186352 Mapper: 59 - - CRC: 3729809153 - Mapper: 432 - CRC: 1027662651 Mapper: 59 - - CRC: 1008552675 - Mapper: 431 - CRC: 1326269571 Mapper: 236 - CRC: 2978626706 @@ -8527,10 +7469,6 @@ MonoBehaviour: Mapper: 215 - CRC: 3367646643 Mapper: 215 - - CRC: 972648519 - Mapper: 395 - - CRC: 3547090062 - Mapper: 395 - CRC: 1048784542 Mapper: 215 - CRC: 3405916127 @@ -8563,18 +7501,10 @@ MonoBehaviour: Mapper: 59 - CRC: 2683598551 Mapper: 236 - - CRC: 3790285249 - Mapper: 396 - - CRC: 4073318735 - Mapper: 395 - - CRC: 1111208404 - Mapper: 395 - CRC: 2526283568 Mapper: 215 - CRC: 931621575 Mapper: 215 - - CRC: 460489932 - Mapper: 456 - CRC: 187920195 Mapper: 215 - CRC: 2209433663 @@ -8627,8 +7557,6 @@ MonoBehaviour: Mapper: 45 - CRC: 3276576311 Mapper: 45 - - CRC: 3838147862 - Mapper: 338 - CRC: 3153849532 Mapper: 176 - CRC: 2186698319 @@ -8643,10 +7571,6 @@ MonoBehaviour: Mapper: 116 - CRC: 3144698196 Mapper: 45 - - CRC: 1172659019 - Mapper: 341 - - CRC: 3681146805 - Mapper: 422 - CRC: 1505425935 Mapper: 178 - CRC: 3075083454 @@ -8677,8 +7601,6 @@ MonoBehaviour: Mapper: 226 - CRC: 1229069706 Mapper: 134 - - CRC: 793342739 - Mapper: 401 - CRC: 172895939 Mapper: 176 - CRC: 4029388371 @@ -8689,12 +7611,6 @@ MonoBehaviour: Mapper: 176 - CRC: 1577100879 Mapper: 59 - - CRC: 3354379069 - Mapper: 313 - - CRC: 2953489947 - Mapper: 313 - - CRC: 478425494 - Mapper: 313 - CRC: 4150525562 Mapper: 45 - CRC: 2467917461 @@ -8747,8 +7663,6 @@ MonoBehaviour: Mapper: 45 - CRC: 1054869033 Mapper: 45 - - CRC: 3035933676 - Mapper: 332 - CRC: 3206778695 Mapper: 45 - CRC: 1293219925 @@ -8767,20 +7681,6 @@ MonoBehaviour: Mapper: 59 - CRC: 2625361664 Mapper: 45 - - CRC: 3758569698 - Mapper: 332 - - CRC: 2130290012 - Mapper: 332 - - CRC: 1748368417 - Mapper: 332 - - CRC: 2628558181 - Mapper: 332 - - CRC: 1723241730 - Mapper: 380 - - CRC: 3524177389 - Mapper: 380 - - CRC: 624503806 - Mapper: 380 - CRC: 2354324974 Mapper: 242 - CRC: 2449913735 @@ -8791,18 +7691,10 @@ MonoBehaviour: Mapper: 176 - CRC: 3325672258 Mapper: 176 - - CRC: 5505777 - Mapper: 336 - - CRC: 733412797 - Mapper: 336 - - CRC: 2580825679 - Mapper: 260 - CRC: 2138554170 Mapper: 176 - CRC: 2721229390 Mapper: 176 - - CRC: 790286844 - Mapper: 260 - CRC: 2670030194 Mapper: 134 - CRC: 4117086243 @@ -8813,8 +7705,6 @@ MonoBehaviour: Mapper: 176 - CRC: 3909268757 Mapper: 134 - - CRC: 3046672739 - Mapper: 260 - CRC: 3393371530 Mapper: 134 - CRC: 4239175722 @@ -8823,12 +7713,8 @@ MonoBehaviour: Mapper: 176 - CRC: 2483631068 Mapper: 176 - - CRC: 2920562328 - Mapper: 260 - CRC: 3228343031 Mapper: 176 - - CRC: 1552988357 - Mapper: 260 - CRC: 1921819823 Mapper: 176 - CRC: 1191014178 @@ -8837,8 +7723,6 @@ MonoBehaviour: Mapper: 176 - CRC: 2198736079 Mapper: 134 - - CRC: 1772142436 - Mapper: 260 - CRC: 1834483828 Mapper: 176 - CRC: 1141947789 @@ -8853,16 +7737,12 @@ MonoBehaviour: Mapper: 57 - CRC: 52959044 Mapper: 52 - - CRC: 1751516361 - Mapper: 260 - CRC: 3273027089 Mapper: 176 - CRC: 4028219375 Mapper: 176 - CRC: 3188003338 Mapper: 176 - - CRC: 1621910655 - Mapper: 260 - CRC: 4084317426 Mapper: 176 - CRC: 4196184156 @@ -8885,8 +7765,6 @@ MonoBehaviour: Mapper: 176 - CRC: 2826232342 Mapper: 52 - - CRC: 243784366 - Mapper: 434 - CRC: 2339159064 Mapper: 134 - CRC: 1293419852 @@ -8903,8 +7781,6 @@ MonoBehaviour: Mapper: 52 - CRC: 1674854178 Mapper: 176 - - CRC: 2169814126 - Mapper: 380 - CRC: 14718367 Mapper: 134 - CRC: 3378466085 @@ -8919,8 +7795,6 @@ MonoBehaviour: Mapper: 134 - CRC: 2784282434 Mapper: 134 - - CRC: 4033093749 - Mapper: 380 - CRC: 303900772 Mapper: 59 - CRC: 1560681988 @@ -8973,32 +7847,16 @@ MonoBehaviour: Mapper: 176 - CRC: 3560054868 Mapper: 57 - - CRC: 1774636253 - Mapper: 268 - - CRC: 2197569865 - Mapper: 268 - - CRC: 3666819057 - Mapper: 268 - - CRC: 1788397038 - Mapper: 268 - - CRC: 1459792389 - Mapper: 268 - CRC: 506468961 Mapper: 52 - CRC: 599877675 Mapper: 134 - - CRC: 3353580331 - Mapper: 291 - - CRC: 1602925653 - Mapper: 359 - CRC: 2590132686 Mapper: 134 - CRC: 2018781137 Mapper: 219 - CRC: 1632105728 Mapper: 52 - - CRC: 4197984654 - Mapper: 380 - CRC: 3459540730 Mapper: 52 - CRC: 3137483396 @@ -9009,20 +7867,8 @@ MonoBehaviour: Mapper: 52 - CRC: 3097927962 Mapper: 52 - - CRC: 1892992668 - Mapper: 420 - CRC: 3740806315 Mapper: 52 - - CRC: 2119966892 - Mapper: 534 - - CRC: 3233516951 - Mapper: 534 - - CRC: 4040660954 - Mapper: 534 - - CRC: 1164973931 - Mapper: 534 - - CRC: 3193211086 - Mapper: 534 - CRC: 1737352618 Mapper: 176 - CRC: 3940864686 @@ -9073,224 +7919,30 @@ MonoBehaviour: Mapper: 178 - CRC: 2435179519 Mapper: 178 - - CRC: 1016529667 - Mapper: 286 - CRC: 1821875116 Mapper: 176 - - CRC: 136216611 - Mapper: 434 - - CRC: 1236433208 - Mapper: 360 - - CRC: 1815140197 - Mapper: 357 - CRC: 3438175699 Mapper: 90 - - CRC: 1245726933 - Mapper: 313 - - CRC: 224266616 - Mapper: 313 - - CRC: 3767153989 - Mapper: 313 - - CRC: 3641404530 - Mapper: 313 - - CRC: 3249576987 - Mapper: 362 - - CRC: 3006608817 - Mapper: 362 - - CRC: 3027692622 - Mapper: 364 - - CRC: 43360563 - Mapper: 313 - - CRC: 3145665897 - Mapper: 361 - CRC: 454524190 Mapper: 51 - CRC: 3952872302 Mapper: 51 - - CRC: 3799496516 - Mapper: 295 - - CRC: 1238911677 - Mapper: 313 - - CRC: 74250709 - Mapper: 383 - - CRC: 2064775073 - Mapper: 295 - - CRC: 129151765 - Mapper: 295 - - CRC: 2804657885 - Mapper: 550 - CRC: 2044559523 Mapper: 91 - - CRC: 3041992100 - Mapper: 358 - CRC: 2232095426 Mapper: 91 - - CRC: 231405386 - Mapper: 361 - - CRC: 3651301586 - Mapper: 361 - - CRC: 1402251594 - Mapper: 361 - - CRC: 1699872144 - Mapper: 374 - - CRC: 650153322 - Mapper: 404 - - CRC: 2793716810 - Mapper: 374 - - CRC: 2517306090 - Mapper: 313 - - CRC: 745280714 - Mapper: 313 - - CRC: 121621639 - Mapper: 313 - - CRC: 1339664542 - Mapper: 313 - - CRC: 124370527 - Mapper: 313 - - CRC: 388372555 - Mapper: 313 - - CRC: 3112659876 - Mapper: 376 - - CRC: 2236551902 - Mapper: 313 - - CRC: 1964650194 - Mapper: 313 - - CRC: 1344914623 - Mapper: 313 - - CRC: 2937868475 - Mapper: 398 - - CRC: 330047479 - Mapper: 450 - - CRC: 1651478915 - Mapper: 396 - - CRC: 711421465 - Mapper: 295 - - CRC: 314473215 - Mapper: 374 - - CRC: 3740127506 - Mapper: 281 - - CRC: 4139617841 - Mapper: 281 - - CRC: 4207370581 - Mapper: 281 - - CRC: 3254792949 - Mapper: 281 - - CRC: 1934434856 - Mapper: 281 - - CRC: 523680043 - Mapper: 281 - - CRC: 3863209502 - Mapper: 388 - - CRC: 2050752208 - Mapper: 388 - - CRC: 4187469175 - Mapper: 313 - - CRC: 458218625 - Mapper: 313 - - CRC: 3711597045 - Mapper: 282 - - CRC: 2269424580 - Mapper: 282 - - CRC: 1839776175 - Mapper: 281 - - CRC: 3258904777 - Mapper: 281 - - CRC: 652286279 - Mapper: 281 - - CRC: 3334124294 - Mapper: 282 - - CRC: 1315988962 - Mapper: 282 - - CRC: 407700224 - Mapper: 282 - - CRC: 2975905382 - Mapper: 313 - - CRC: 3516774869 - Mapper: 282 - - CRC: 1122619135 - Mapper: 281 - - CRC: 2761305195 - Mapper: 397 - - CRC: 510407492 - Mapper: 282 - - CRC: 1660938196 - Mapper: 396 - - CRC: 2816550722 - Mapper: 396 - - CRC: 739509991 - Mapper: 387 - - CRC: 3889691196 - Mapper: 281 - - CRC: 310790424 - Mapper: 387 - - CRC: 1804372564 - Mapper: 386 - - CRC: 4223772297 - Mapper: 387 - - CRC: 790278992 - Mapper: 387 - - CRC: 1418642969 - Mapper: 295 - - CRC: 4145713464 - Mapper: 295 - - CRC: 86293921 - Mapper: 295 - - CRC: 2795617323 - Mapper: 282 - - CRC: 304183586 - Mapper: 295 - - CRC: 3771896077 - Mapper: 295 - - CRC: 3890664711 - Mapper: 282 - - CRC: 3436564949 - Mapper: 282 - - CRC: 927074999 - Mapper: 295 - - CRC: 2065191091 - Mapper: 295 - - CRC: 2099109841 - Mapper: 377 - - CRC: 2272160229 - Mapper: 377 - - CRC: 2181260847 - Mapper: 358 - - CRC: 3953263612 - Mapper: 282 - - CRC: 310963875 - Mapper: 358 - CRC: 360599156 Mapper: 90 - - CRC: 3052203033 - Mapper: 267 - CRC: 3647573083 Mapper: 90 - CRC: 1079033740 Mapper: 90 - CRC: 2259053197 Mapper: 45 - - CRC: 3708364367 - Mapper: 411 - - CRC: 221855114 - Mapper: 411 - - CRC: 2696990702 - Mapper: 411 - - CRC: 2114754000 - Mapper: 411 - - CRC: 2364570618 - Mapper: 411 - - CRC: 324302549 - Mapper: 411 - CRC: 3815786496 Mapper: 45 - - CRC: 3624343125 - Mapper: 356 - - CRC: 3248546290 - Mapper: 411 - CRC: 1785380771 Mapper: 45 - - CRC: 2016915422 - Mapper: 556 - CRC: 865252382 Mapper: 176 - CRC: 852340099 @@ -9303,8 +7955,6 @@ MonoBehaviour: Mapper: 45 - CRC: 1488041531 Mapper: 45 - - CRC: 1296122955 - Mapper: 410 - CRC: 1435823534 Mapper: 45 - CRC: 99285874 @@ -9321,14 +7971,6 @@ MonoBehaviour: Mapper: 45 - CRC: 999048740 Mapper: 45 - - CRC: 4246765140 - Mapper: 295 - - CRC: 693669339 - Mapper: 282 - - CRC: 376064123 - Mapper: 421 - - CRC: 2705526507 - Mapper: 282 - CRC: 966497168 Mapper: 45 - CRC: 3885962622 @@ -9337,8 +7979,6 @@ MonoBehaviour: Mapper: 176 - CRC: 3511031767 Mapper: 176 - - CRC: 2478236100 - Mapper: 335 - CRC: 4214503932 Mapper: 141 - CRC: 790005477 @@ -9357,16 +7997,6 @@ MonoBehaviour: Mapper: 141 - CRC: 220216805 Mapper: 141 - - CRC: 4236642601 - Mapper: 268 - - CRC: 2652870513 - Mapper: 268 - - CRC: 4046920727 - Mapper: 268 - - CRC: 605232701 - Mapper: 268 - - CRC: 1618769881 - Mapper: 268 - CRC: 455187969 Mapper: 15 - CRC: 1672230364 @@ -9377,8 +8007,6 @@ MonoBehaviour: Mapper: 241 - CRC: 1654636268 Mapper: 176 - - CRC: 4292583273 - Mapper: 319 - CRC: 1259626508 Mapper: 242 - CRC: 3065604610 @@ -9405,32 +8033,16 @@ MonoBehaviour: Mapper: 203 - CRC: 2121317620 Mapper: 242 - - CRC: 4011928179 - Mapper: 452 - - CRC: 2399422815 - Mapper: 438 - CRC: 234849503 Mapper: 227 - - CRC: 1182894870 - Mapper: 447 - CRC: 516022251 Mapper: 217 - CRC: 1785071945 Mapper: 134 - - CRC: 1835138593 - Mapper: 422 - CRC: 1231208484 Mapper: 242 - - CRC: 3073060084 - Mapper: 260 - - CRC: 1304825981 - Mapper: 260 - - CRC: 7592920 - Mapper: 260 - CRC: 3632251267 Mapper: 45 - - CRC: 3742046218 - Mapper: 261 - CRC: 682175110 Mapper: 45 - CRC: 3461048083 @@ -9439,8 +8051,6 @@ MonoBehaviour: Mapper: 134 - CRC: 2069041724 Mapper: 242 - - CRC: 990479172 - Mapper: 260 - CRC: 1760427498 Mapper: 176 - CRC: 2392411085 @@ -9451,22 +8061,14 @@ MonoBehaviour: Mapper: 205 - CRC: 1713981792 Mapper: 202 - - CRC: 1184897137 - Mapper: 422 - CRC: 830367192 Mapper: 200 - CRC: 3056710973 Mapper: 200 - - CRC: 533086400 - Mapper: 260 - - CRC: 1753331027 - Mapper: 287 - CRC: 2816537218 Mapper: 45 - CRC: 1314853434 Mapper: 176 - - CRC: 2720142523 - Mapper: 260 - CRC: 3175819008 Mapper: 45 - CRC: 1613594139 @@ -9475,26 +8077,18 @@ MonoBehaviour: Mapper: 45 - CRC: 882708785 Mapper: 45 - - CRC: 1459636938 - Mapper: 380 - CRC: 3237009464 Mapper: 200 - CRC: 2349098104 Mapper: 227 - - CRC: 455052639 - Mapper: 380 - CRC: 2913057494 Mapper: 203 - CRC: 3988901193 Mapper: 202 - CRC: 430118767 Mapper: 212 - - CRC: 2411369879 - Mapper: 268 - CRC: 2108871157 Mapper: 176 - - CRC: 1574504251 - Mapper: 260 - CRC: 1977610660 Mapper: 176 - CRC: 1412164950 @@ -9507,8 +8101,6 @@ MonoBehaviour: Mapper: 212 - CRC: 1391932884 Mapper: 45 - - CRC: 610711562 - Mapper: 422 - CRC: 2392522480 Mapper: 225 - CRC: 1405347544 @@ -9517,46 +8109,24 @@ MonoBehaviour: Mapper: 201 - CRC: 2899087414 Mapper: 176 - - CRC: 873587856 - Mapper: 455 - - CRC: 3801590022 - Mapper: 457 - CRC: 839987262 Mapper: 134 - CRC: 3082130507 Mapper: 45 - - CRC: 1084341497 - Mapper: 414 - CRC: 2477017337 Mapper: 212 - - CRC: 979644209 - Mapper: 422 - CRC: 2621630050 Mapper: 83 - CRC: 1714285154 Mapper: 212 - CRC: 3037564860 Mapper: 176 - - CRC: 3623967354 - Mapper: 370 - CRC: 1819410094 Mapper: 45 - CRC: 1017932358 Mapper: 242 - CRC: 42979060 Mapper: 212 - - CRC: 2352492891 - Mapper: 319 - - CRC: 844536046 - Mapper: 402 - - CRC: 1104297615 - Mapper: 268 - - CRC: 1168760499 - Mapper: 268 - - CRC: 854660971 - Mapper: 268 - - CRC: 3152822375 - Mapper: 319 - CRC: 3860187359 Mapper: 60 - CRC: 2575149652 @@ -9569,26 +8139,12 @@ MonoBehaviour: Mapper: 176 - CRC: 2296431756 Mapper: 176 - - CRC: 2515248736 - Mapper: 372 - CRC: 4006543807 Mapper: 176 - - CRC: 1128554703 - Mapper: 403 - - CRC: 2986743741 - Mapper: 403 - - CRC: 3906407902 - Mapper: 403 - - CRC: 2421344518 - Mapper: 277 - CRC: 2140915941 Mapper: 45 - - CRC: 1592426151 - Mapper: 319 - CRC: 1881805535 Mapper: 62 - - CRC: 1617720563 - Mapper: 313 - CRC: 1435241923 Mapper: 178 - CRC: 289494286 @@ -9597,8 +8153,6 @@ MonoBehaviour: Mapper: 45 - CRC: 2085535148 Mapper: 212 - - CRC: 2035975549 - Mapper: 448 - CRC: 317112642 Mapper: 134 - CRC: 2407215079 @@ -9611,36 +8165,20 @@ MonoBehaviour: Mapper: 45 - CRC: 1533001348 Mapper: 44 - - CRC: 2020663794 - Mapper: 359 - - CRC: 848958402 - Mapper: 359 - CRC: 446088275 Mapper: 45 - - CRC: 1076293329 - Mapper: 268 - CRC: 2652576084 Mapper: 134 - - CRC: 741561655 - Mapper: 268 - - CRC: 1681326864 - Mapper: 449 - CRC: 2174347840 Mapper: 214 - CRC: 3063434669 Mapper: 176 - - CRC: 3677171080 - Mapper: 369 - - CRC: 1488125508 - Mapper: 353 - CRC: 2118423893 Mapper: 53 - CRC: 722893296 Mapper: 212 - CRC: 764427790 Mapper: 212 - - CRC: 610910638 - Mapper: 259 - CRC: 1914130211 Mapper: 212 - CRC: 1699126120 @@ -9665,12 +8203,6 @@ MonoBehaviour: Mapper: 212 - CRC: 656869817 Mapper: 237 - - CRC: 1936579041 - Mapper: 314 - - CRC: 2947124418 - Mapper: 314 - - CRC: 629151064 - Mapper: 314 - CRC: 77735208 Mapper: 45 - CRC: 3115780362 @@ -9679,18 +8211,10 @@ MonoBehaviour: Mapper: 45 - CRC: 669403707 Mapper: 225 - - CRC: 151714339 - Mapper: 344 - - CRC: 1653715908 - Mapper: 449 - CRC: 2020223588 Mapper: 45 - CRC: 2739584700 Mapper: 225 - - CRC: 1330267148 - Mapper: 375 - - CRC: 1235602855 - Mapper: 541 - CRC: 2174929994 Mapper: 4 - CRC: 4281574181 @@ -11319,8 +9843,6 @@ MonoBehaviour: Mapper: 2 - CRC: 2815567855 Mapper: 2 - - CRC: 3487184378 - Mapper: 561 - CRC: 1283448150 Mapper: 2 - CRC: 512504559 @@ -11331,12 +9853,6 @@ MonoBehaviour: Mapper: 2 - CRC: 1841729753 Mapper: 2 - - CRC: 71706671 - Mapper: 561 - - CRC: 3827241209 - Mapper: 561 - - CRC: 311423642 - Mapper: 561 - CRC: 2529876699 Mapper: 2 - CRC: 3362687331 @@ -11353,350 +9869,44 @@ MonoBehaviour: Mapper: 66 - CRC: 2679879435 Mapper: 66 - - CRC: 779641759 - Mapper: 561 - - CRC: 3707063547 - Mapper: 561 - - CRC: 850268092 - Mapper: 561 - - CRC: 34401318 - Mapper: 561 - - CRC: 2463842810 - Mapper: 561 - - CRC: 697874020 - Mapper: 561 - - CRC: 906739504 - Mapper: 561 - - CRC: 1465788836 - Mapper: 561 - - CRC: 3824908676 - Mapper: 561 - - CRC: 1569939425 - Mapper: 561 - - CRC: 2650980950 - Mapper: 561 - - CRC: 2349305058 - Mapper: 561 - - CRC: 306347297 - Mapper: 561 - - CRC: 1664357643 - Mapper: 561 - - CRC: 2325572716 - Mapper: 561 - - CRC: 1295816935 - Mapper: 561 - - CRC: 2814349809 - Mapper: 561 - - CRC: 2416240094 - Mapper: 561 - - CRC: 594581805 - Mapper: 561 - CRC: 471005088 Mapper: 6 - - CRC: 2332970405 - Mapper: 561 - - CRC: 805426345 - Mapper: 561 - - CRC: 1660147553 - Mapper: 561 - - CRC: 690497384 - Mapper: 561 - - CRC: 2017383960 - Mapper: 561 - - CRC: 1920056468 - Mapper: 561 - - CRC: 169327809 - Mapper: 561 - - CRC: 2504842594 - Mapper: 561 - - CRC: 2471996085 - Mapper: 561 - - CRC: 3264487405 - Mapper: 561 - - CRC: 2251797125 - Mapper: 561 - - CRC: 2542126392 - Mapper: 561 - - CRC: 4282688986 - Mapper: 561 - - CRC: 2409788929 - Mapper: 561 - - CRC: 378875175 - Mapper: 561 - - CRC: 4205803779 - Mapper: 561 - - CRC: 582175254 - Mapper: 561 - - CRC: 838502405 - Mapper: 561 - - CRC: 1440353617 - Mapper: 561 - - CRC: 605153546 - Mapper: 561 - - CRC: 2003851651 - Mapper: 561 - - CRC: 1964683675 - Mapper: 561 - - CRC: 1191193677 - Mapper: 561 - - CRC: 796041406 - Mapper: 561 - - CRC: 387654051 - Mapper: 561 - - CRC: 595567795 - Mapper: 561 - - CRC: 3357241956 - Mapper: 561 - - CRC: 1214735520 - Mapper: 561 - - CRC: 4223991351 - Mapper: 561 - - CRC: 3676786962 - Mapper: 561 - - CRC: 956734125 - Mapper: 561 - - CRC: 3117828183 - Mapper: 561 - - CRC: 2529067905 - Mapper: 561 - - CRC: 794961685 - Mapper: 561 - CRC: 2068541009 Mapper: 6 - - CRC: 2706722578 - Mapper: 561 - - CRC: 3964866342 - Mapper: 561 - - CRC: 836281394 - Mapper: 561 - - CRC: 532875868 - Mapper: 561 - - CRC: 657314033 - Mapper: 561 - - CRC: 1044180291 - Mapper: 561 - - CRC: 3323537647 - Mapper: 561 - CRC: 98797409 Mapper: 6 - - CRC: 2124112485 - Mapper: 561 - - CRC: 3314322941 - Mapper: 561 - - CRC: 3321900866 - Mapper: 561 - - CRC: 3084260612 - Mapper: 561 - - CRC: 2621336943 - Mapper: 561 - - CRC: 2577272255 - Mapper: 561 - - CRC: 1153348784 - Mapper: 561 - - CRC: 551465279 - Mapper: 561 - - CRC: 1278713875 - Mapper: 561 - - CRC: 3822934158 - Mapper: 561 - - CRC: 963328394 - Mapper: 561 - - CRC: 69795172 - Mapper: 561 - - CRC: 2493959898 - Mapper: 561 - - CRC: 138969659 - Mapper: 561 - - CRC: 2657998726 - Mapper: 561 - - CRC: 23745874 - Mapper: 561 - - CRC: 1065495603 - Mapper: 561 - - CRC: 2674537693 - Mapper: 561 - - CRC: 2075062661 - Mapper: 561 - - CRC: 3917423869 - Mapper: 561 - - CRC: 3248253583 - Mapper: 561 - - CRC: 3405028045 - Mapper: 561 - - CRC: 1937144985 - Mapper: 561 - - CRC: 326256111 - Mapper: 561 - - CRC: 497683850 - Mapper: 561 - CRC: 2737480157 Mapper: 6 - CRC: 2799567996 Mapper: 6 - - CRC: 2888881859 - Mapper: 561 - - CRC: 725601672 - Mapper: 561 - - CRC: 3242554585 - Mapper: 561 - - CRC: 2100397169 - Mapper: 561 - - CRC: 2143703482 - Mapper: 561 - CRC: 2838269931 Mapper: 2 - - CRC: 3391890402 - Mapper: 561 - - CRC: 2741289853 - Mapper: 561 - - CRC: 4093997337 - Mapper: 561 - - CRC: 2617056992 - Mapper: 561 - - CRC: 1792667467 - Mapper: 561 - CRC: 3490789156 Mapper: 6 - - CRC: 3511416356 - Mapper: 561 - - CRC: 1203802971 - Mapper: 561 - - CRC: 3380898269 - Mapper: 561 - - CRC: 536053380 - Mapper: 561 - - CRC: 992283313 - Mapper: 561 - - CRC: 3041197990 - Mapper: 561 - - CRC: 1325535880 - Mapper: 561 - CRC: 352797039 Mapper: 6 - - CRC: 3373271409 - Mapper: 561 - - CRC: 1890858646 - Mapper: 561 - - CRC: 936221232 - Mapper: 561 - - CRC: 280685566 - Mapper: 561 - - CRC: 2441265000 - Mapper: 561 - - CRC: 804309603 - Mapper: 561 - - CRC: 3498642747 - Mapper: 561 - - CRC: 1834234856 - Mapper: 561 - - CRC: 1029660427 - Mapper: 561 - - CRC: 795571439 - Mapper: 561 - - CRC: 1575249715 - Mapper: 561 - CRC: 1812165401 Mapper: 6 - - CRC: 4059144754 - Mapper: 561 - - CRC: 1073336067 - Mapper: 561 - - CRC: 2597140128 - Mapper: 561 - - CRC: 1397431273 - Mapper: 561 - - CRC: 2786756578 - Mapper: 561 - - CRC: 4228351011 - Mapper: 561 - - CRC: 787958934 - Mapper: 561 - CRC: 63469932 Mapper: 6 - - CRC: 3042419000 - Mapper: 561 - - CRC: 3869852399 - Mapper: 561 - - CRC: 3072361101 - Mapper: 561 - - CRC: 558725714 - Mapper: 561 - - CRC: 3437652746 - Mapper: 561 - - CRC: 1888099907 - Mapper: 561 - - CRC: 4149237685 - Mapper: 561 - - CRC: 465822192 - Mapper: 561 - - CRC: 877856436 - Mapper: 561 - - CRC: 525071768 - Mapper: 561 - - CRC: 3469079746 - Mapper: 561 - - CRC: 1347202746 - Mapper: 561 - - CRC: 1069555568 - Mapper: 561 - - CRC: 878596538 - Mapper: 561 - - CRC: 1200663391 - Mapper: 561 - - CRC: 3580652639 - Mapper: 561 - - CRC: 3580617175 - Mapper: 561 - - CRC: 2201639597 - Mapper: 561 - - CRC: 3185214921 - Mapper: 561 - - CRC: 2920719504 - Mapper: 561 - - CRC: 496102222 - Mapper: 561 - - CRC: 3593667233 - Mapper: 561 - - CRC: 1513917282 - Mapper: 561 - - CRC: 2260801267 - Mapper: 561 - - CRC: 1076849475 - Mapper: 561 - - CRC: 3762114825 - Mapper: 561 - - CRC: 1220315554 - Mapper: 561 - - CRC: 234394395 - Mapper: 561 - CRC: 2046993025 Mapper: 3 - CRC: 1191862075 Mapper: 3 - CRC: 1788924246 Mapper: 3 - - CRC: 2791545365 - Mapper: 561 - CRC: 3776332927 Mapper: 3 - CRC: 926586214 Mapper: 3 - - CRC: 3436454100 - Mapper: 561 - CRC: 3664977684 Mapper: 2 - CRC: 2374446537 Mapper: 3 - CRC: 3011686052 Mapper: 2 - - CRC: 3876628139 - Mapper: 561 - CRC: 1339423499 Mapper: 3 - - CRC: 1564979799 - Mapper: 561 - - CRC: 3618329457 - Mapper: 561 - CRC: 3444750193 Mapper: 3 - CRC: 4068724568 @@ -11705,38 +9915,16 @@ MonoBehaviour: Mapper: 3 - CRC: 698299739 Mapper: 2 - - CRC: 2588321345 - Mapper: 561 - - CRC: 645385229 - Mapper: 561 - - CRC: 2578561058 - Mapper: 561 - CRC: 3801166325 Mapper: 3 - CRC: 200087074 Mapper: 3 - - CRC: 3145529248 - Mapper: 561 - - CRC: 1523010152 - Mapper: 561 - - CRC: 1120237920 - Mapper: 561 - - CRC: 3657175005 - Mapper: 561 - CRC: 2874725978 Mapper: 2 - - CRC: 1458840767 - Mapper: 561 - CRC: 2227369409 Mapper: 3 - - CRC: 2486235042 - Mapper: 561 - CRC: 2079858428 Mapper: 0 - - CRC: 2179473596 - Mapper: 561 - - CRC: 2597295311 - Mapper: 561 - CRC: 182667115 Mapper: 3 - CRC: 434542439 @@ -11749,680 +9937,30 @@ MonoBehaviour: Mapper: 0 - CRC: 3480534178 Mapper: 3 - - CRC: 1367274853 - Mapper: 561 - - CRC: 670529321 - Mapper: 561 - - CRC: 1383044928 - Mapper: 561 - CRC: 2309695448 Mapper: 2 - - CRC: 2758028098 - Mapper: 561 - CRC: 3219706782 Mapper: 3 - CRC: 3898637618 Mapper: 3 - - CRC: 4211032439 - Mapper: 561 - - CRC: 1556911027 - Mapper: 561 - - CRC: 3010702397 - Mapper: 561 - CRC: 2449743945 Mapper: 2 - CRC: 199596380 Mapper: 66 - - CRC: 2199647434 - Mapper: 561 - CRC: 1988052620 Mapper: 71 - - CRC: 816555987 - Mapper: 561 - CRC: 1029848174 Mapper: 2 - - CRC: 842919579 - Mapper: 561 - - CRC: 4059754766 - Mapper: 561 - - CRC: 1720055636 - Mapper: 561 - - CRC: 2498725061 - Mapper: 561 - CRC: 683978852 Mapper: 3 - CRC: 2136276929 Mapper: 3 - - CRC: 2321952486 - Mapper: 561 - - CRC: 227424787 - Mapper: 561 - CRC: 4071353136 Mapper: 3 - - CRC: 1325588123 - Mapper: 561 - CRC: 3956302925 Mapper: 3 - - CRC: 2893327179 - Mapper: 561 - - CRC: 3513016108 - Mapper: 561 - CRC: 3756752536 Mapper: 3 - - CRC: 1325990627 - Mapper: 561 - - CRC: 1065576813 - Mapper: 562 - - CRC: 794626205 - Mapper: 562 - - CRC: 972706502 - Mapper: 562 - - CRC: 1899943414 - Mapper: 562 - - CRC: 1724453957 - Mapper: 562 - - CRC: 623465 - Mapper: 562 - - CRC: 2866131865 - Mapper: 562 - - CRC: 1808639698 - Mapper: 562 - - CRC: 4062379753 - Mapper: 562 - - CRC: 2943817616 - Mapper: 562 - - CRC: 4289543750 - Mapper: 562 - - CRC: 4256579691 - Mapper: 562 - - CRC: 701529213 - Mapper: 562 - - CRC: 115635143 - Mapper: 562 - - CRC: 3513731984 - Mapper: 562 - - CRC: 3517903372 - Mapper: 562 - - CRC: 4019021648 - Mapper: 562 - - CRC: 1258842747 - Mapper: 562 - - CRC: 1895072855 - Mapper: 562 - - CRC: 2682119585 - Mapper: 562 - - CRC: 823869578 - Mapper: 562 - - CRC: 3648200563 - Mapper: 562 - - CRC: 1517967426 - Mapper: 562 - - CRC: 2236922363 - Mapper: 562 - - CRC: 3378855876 - Mapper: 562 - - CRC: 16922957 - Mapper: 562 - - CRC: 23057491 - Mapper: 562 - - CRC: 1397732422 - Mapper: 562 - - CRC: 2361567217 - Mapper: 562 - - CRC: 3371702562 - Mapper: 562 - - CRC: 3223045219 - Mapper: 562 - - CRC: 2207155679 - Mapper: 562 - - CRC: 1590623426 - Mapper: 562 - - CRC: 149935537 - Mapper: 562 - - CRC: 1701629304 - Mapper: 562 - - CRC: 4229060620 - Mapper: 562 - - CRC: 2942583656 - Mapper: 562 - - CRC: 2215027322 - Mapper: 562 - - CRC: 1313435048 - Mapper: 562 - - CRC: 3454017310 - Mapper: 562 - - CRC: 2026044618 - Mapper: 562 - - CRC: 1151645485 - Mapper: 562 - - CRC: 4285974210 - Mapper: 562 - - CRC: 2509908452 - Mapper: 562 - - CRC: 4102529996 - Mapper: 562 - - CRC: 1765378907 - Mapper: 562 - - CRC: 4113863960 - Mapper: 562 - - CRC: 2614419594 - Mapper: 562 - - CRC: 230601206 - Mapper: 562 - - CRC: 3785998006 - Mapper: 562 - - CRC: 1992059506 - Mapper: 562 - - CRC: 1759087165 - Mapper: 562 - - CRC: 1670024628 - Mapper: 561 - - CRC: 3679056523 - Mapper: 562 - - CRC: 171376341 - Mapper: 562 - - CRC: 2342736252 - Mapper: 562 - - CRC: 1511323345 - Mapper: 562 - - CRC: 887056136 - Mapper: 562 - - CRC: 2716306385 - Mapper: 562 - - CRC: 1091860874 - Mapper: 562 - - CRC: 1647435718 - Mapper: 562 - - CRC: 65322079 - Mapper: 562 - - CRC: 2465270140 - Mapper: 562 - - CRC: 325181794 - Mapper: 562 - - CRC: 3359017339 - Mapper: 562 - - CRC: 1646487143 - Mapper: 562 - - CRC: 2261138860 - Mapper: 562 - - CRC: 1236120009 - Mapper: 562 - - CRC: 972572170 - Mapper: 562 - - CRC: 1137907258 - Mapper: 562 - - CRC: 3321098796 - Mapper: 562 - - CRC: 902944646 - Mapper: 562 - - CRC: 1141736854 - Mapper: 562 - - CRC: 4150654722 - Mapper: 562 - - CRC: 3873859428 - Mapper: 561 - - CRC: 745527184 - Mapper: 562 - - CRC: 1979348102 - Mapper: 562 - - CRC: 833501128 - Mapper: 562 - - CRC: 3423477445 - Mapper: 562 - - CRC: 2175824841 - Mapper: 562 - - CRC: 3213941223 - Mapper: 562 - - CRC: 2268979795 - Mapper: 562 - - CRC: 3596320631 - Mapper: 562 - - CRC: 1972808572 - Mapper: 562 - - CRC: 3948944655 - Mapper: 562 - - CRC: 2233505013 - Mapper: 562 - - CRC: 2848019697 - Mapper: 562 - - CRC: 1990432096 - Mapper: 562 - - CRC: 3450486833 - Mapper: 562 - - CRC: 3622363305 - Mapper: 562 - - CRC: 1995656593 - Mapper: 562 - - CRC: 47530110 - Mapper: 562 - - CRC: 3563795022 - Mapper: 562 - - CRC: 1267707792 - Mapper: 562 - - CRC: 3913952118 - Mapper: 562 - - CRC: 893432771 - Mapper: 562 - - CRC: 2837961158 - Mapper: 562 - - CRC: 3944345819 - Mapper: 562 - - CRC: 3453576887 - Mapper: 562 - - CRC: 384265121 - Mapper: 562 - - CRC: 3558630030 - Mapper: 562 - - CRC: 3645021682 - Mapper: 562 - - CRC: 3049256819 - Mapper: 562 - - CRC: 3961924571 - Mapper: 562 - - CRC: 1006781049 - Mapper: 562 - - CRC: 1442328404 - Mapper: 562 - - CRC: 527588315 - Mapper: 562 - - CRC: 1120437877 - Mapper: 562 - - CRC: 2338434686 - Mapper: 562 - - CRC: 3176148941 - Mapper: 562 - - CRC: 3820091404 - Mapper: 562 - - CRC: 841285919 - Mapper: 562 - - CRC: 4201207634 - Mapper: 562 - - CRC: 2015024484 - Mapper: 562 - - CRC: 45484875 - Mapper: 562 - - CRC: 2068727626 - Mapper: 562 - - CRC: 974654141 - Mapper: 562 - - CRC: 3327443341 - Mapper: 562 - - CRC: 1300030745 - Mapper: 562 - - CRC: 1770788678 - Mapper: 562 - - CRC: 418278008 - Mapper: 562 - - CRC: 3622488407 - Mapper: 562 - - CRC: 151540265 - Mapper: 562 - - CRC: 277978310 - Mapper: 562 - - CRC: 968596970 - Mapper: 562 - - CRC: 2196255903 - Mapper: 562 - - CRC: 3832315243 - Mapper: 562 - - CRC: 385515111 - Mapper: 562 - - CRC: 138086557 - Mapper: 562 - - CRC: 3758460297 - Mapper: 562 - - CRC: 2158637000 - Mapper: 562 - - CRC: 3568215027 - Mapper: 562 - - CRC: 2783398842 - Mapper: 562 - - CRC: 933518286 - Mapper: 562 - - CRC: 1997835811 - Mapper: 562 - - CRC: 3179943202 - Mapper: 562 - - CRC: 3999550422 - Mapper: 562 - - CRC: 87009600 - Mapper: 562 - - CRC: 903071872 - Mapper: 562 - - CRC: 234419588 - Mapper: 562 - - CRC: 1698610234 - Mapper: 562 - - CRC: 116420888 - Mapper: 562 - - CRC: 970212997 - Mapper: 562 - - CRC: 2412634047 - Mapper: 562 - - CRC: 2042247618 - Mapper: 562 - - CRC: 3036574797 - Mapper: 562 - - CRC: 1472137361 - Mapper: 562 - - CRC: 2036904698 - Mapper: 562 - - CRC: 1375460185 - Mapper: 562 - - CRC: 3912072201 - Mapper: 562 - - CRC: 3047903881 - Mapper: 562 - - CRC: 3049415059 - Mapper: 562 - - CRC: 3239048953 - Mapper: 562 - - CRC: 698942298 - Mapper: 562 - - CRC: 3024339923 - Mapper: 562 - - CRC: 1227348123 - Mapper: 562 - - CRC: 2689938027 - Mapper: 562 - - CRC: 2644550771 - Mapper: 562 - - CRC: 2268982946 - Mapper: 562 - - CRC: 1483241049 - Mapper: 562 - - CRC: 395106501 - Mapper: 562 - - CRC: 2855548480 - Mapper: 562 - - CRC: 3153988824 - Mapper: 562 - - CRC: 2533709032 - Mapper: 562 - - CRC: 3893496770 - Mapper: 562 - - CRC: 3313058223 - Mapper: 562 - - CRC: 2866421959 - Mapper: 562 - - CRC: 2646271041 - Mapper: 562 - - CRC: 2294393647 - Mapper: 562 - - CRC: 354404346 - Mapper: 562 - - CRC: 41529420 - Mapper: 562 - - CRC: 841662005 - Mapper: 562 - - CRC: 3658886478 - Mapper: 562 - - CRC: 1804659581 - Mapper: 562 - - CRC: 320967944 - Mapper: 562 - - CRC: 1477494258 - Mapper: 562 - - CRC: 1808228561 - Mapper: 562 - - CRC: 2552483497 - Mapper: 562 - - CRC: 3081494619 - Mapper: 562 - - CRC: 2468557088 - Mapper: 562 - - CRC: 3550766102 - Mapper: 562 - - CRC: 1011927259 - Mapper: 562 - - CRC: 2654456922 - Mapper: 562 - - CRC: 2859256707 - Mapper: 562 - - CRC: 3268677212 - Mapper: 562 - - CRC: 4200016459 - Mapper: 562 - - CRC: 4175522004 - Mapper: 562 - - CRC: 3779476312 - Mapper: 562 - - CRC: 3122231287 - Mapper: 562 - - CRC: 30601717 - Mapper: 562 - - CRC: 362940351 - Mapper: 562 - - CRC: 3826449725 - Mapper: 562 - - CRC: 3375281495 - Mapper: 562 - - CRC: 190814560 - Mapper: 562 - - CRC: 2479630902 - Mapper: 562 - - CRC: 3281349979 - Mapper: 562 - - CRC: 67898550 - Mapper: 562 - - CRC: 1666215860 - Mapper: 562 - - CRC: 467864466 - Mapper: 562 - - CRC: 1535047422 - Mapper: 562 - - CRC: 3509155092 - Mapper: 562 - - CRC: 2010509809 - Mapper: 562 - - CRC: 1032525320 - Mapper: 562 - - CRC: 3742894673 - Mapper: 562 - - CRC: 3980578545 - Mapper: 562 - - CRC: 1170500908 - Mapper: 562 - - CRC: 2820491641 - Mapper: 562 - - CRC: 2481592446 - Mapper: 562 - - CRC: 626640404 - Mapper: 562 - - CRC: 3632550507 - Mapper: 562 - - CRC: 582214988 - Mapper: 562 - - CRC: 2561550114 - Mapper: 562 - - CRC: 4210386186 - Mapper: 562 - - CRC: 4155764488 - Mapper: 562 - - CRC: 3217163211 - Mapper: 562 - - CRC: 1818414040 - Mapper: 562 - - CRC: 1242097821 - Mapper: 562 - - CRC: 2692058288 - Mapper: 562 - - CRC: 2688612802 - Mapper: 562 - - CRC: 40349157 - Mapper: 562 - - CRC: 1748114781 - Mapper: 562 - - CRC: 1563650098 - Mapper: 562 - - CRC: 1938484283 - Mapper: 562 - - CRC: 495581240 - Mapper: 562 - - CRC: 2046629757 - Mapper: 562 - - CRC: 1584688867 - Mapper: 562 - - CRC: 249346411 - Mapper: 562 - - CRC: 399011382 - Mapper: 562 - - CRC: 3307112295 - Mapper: 562 - - CRC: 633603466 - Mapper: 562 - - CRC: 2478945341 - Mapper: 562 - - CRC: 2344443112 - Mapper: 562 - - CRC: 710984560 - Mapper: 562 - - CRC: 2609021721 - Mapper: 562 - - CRC: 458886821 - Mapper: 562 - - CRC: 2144508831 - Mapper: 562 - - CRC: 2721809642 - Mapper: 562 - - CRC: 3041449610 - Mapper: 562 - - CRC: 3166424979 - Mapper: 562 - - CRC: 1290570851 - Mapper: 562 - - CRC: 2564994952 - Mapper: 562 - - CRC: 4084302331 - Mapper: 562 - - CRC: 2588338075 - Mapper: 562 - - CRC: 2741683417 - Mapper: 562 - - CRC: 2674886037 - Mapper: 562 - - CRC: 1676823086 - Mapper: 562 - - CRC: 3626009468 - Mapper: 562 - - CRC: 4248178675 - Mapper: 562 - - CRC: 2268061788 - Mapper: 562 - - CRC: 475434207 - Mapper: 562 - - CRC: 1209587985 - Mapper: 562 - - CRC: 3020270934 - Mapper: 562 - - CRC: 3939672831 - Mapper: 562 - - CRC: 3953030631 - Mapper: 562 - - CRC: 4021539312 - Mapper: 562 - - CRC: 4205586005 - Mapper: 562 - - CRC: 2304792243 - Mapper: 562 - - CRC: 40222052 - Mapper: 562 - - CRC: 2648037117 - Mapper: 562 - - CRC: 2858790335 - Mapper: 562 - - CRC: 1334312670 - Mapper: 562 - - CRC: 3465687428 - Mapper: 562 - - CRC: 2425271108 - Mapper: 562 - - CRC: 2887178338 - Mapper: 562 - - CRC: 1476732570 - Mapper: 562 - - CRC: 731891207 - Mapper: 562 - - CRC: 1613023004 - Mapper: 562 - - CRC: 3390186554 - Mapper: 562 - - CRC: 2674147518 - Mapper: 562 - - CRC: 3848407444 - Mapper: 562 - - CRC: 1998811552 - Mapper: 561 - - CRC: 2648299000 - Mapper: 562 - - CRC: 4177081637 - Mapper: 561 - - CRC: 1824754070 - Mapper: 561 - - CRC: 159758783 - Mapper: 561 - - CRC: 684810577 - Mapper: 561 - - CRC: 29492517 - Mapper: 561 - - CRC: 3503620753 - Mapper: 561 - - CRC: 2159796568 - Mapper: 561 - - CRC: 2019473240 - Mapper: 561 - - CRC: 697091092 - Mapper: 562 - - CRC: 1153300839 - Mapper: 562 - - CRC: 2266291894 - Mapper: 562 - - CRC: 12715232 - Mapper: 562 - - CRC: 3842786616 - Mapper: 562 - - CRC: 3294168445 - Mapper: 561 - - CRC: 3308284664 - Mapper: 561 - - CRC: 191420135 - Mapper: 562 - - CRC: 3830025704 - Mapper: 562 - - CRC: 38123599 - Mapper: 562 - - CRC: 1424935635 - Mapper: 561 - - CRC: 1589175273 - Mapper: 562 - - CRC: 3919296971 - Mapper: 562 - - CRC: 4286084049 - Mapper: 562 - - CRC: 3490925380 - Mapper: 562 - - CRC: 34030097 - Mapper: 562 - - CRC: 2916677418 - Mapper: 562 - - CRC: 3126246509 - Mapper: 561 - - CRC: 4162842648 - Mapper: 562 - - CRC: 315517866 - Mapper: 562 - - CRC: 4126967692 - Mapper: 562 - - CRC: 2331879267 - Mapper: 562 - - CRC: 240662824 - Mapper: 561 - - CRC: 1583967447 - Mapper: 562 - - CRC: 709288519 - Mapper: 562 - - CRC: 1818383648 - Mapper: 562 - CRC: 976969305 Mapper: 4 - CRC: 3573430668 @@ -12601,22 +10139,10 @@ MonoBehaviour: Mapper: 4 - CRC: 3178844493 Mapper: 4 - - CRC: 713973657 - Mapper: 548 - - CRC: 893280887 - Mapper: 303 - - CRC: 1525247014 - Mapper: 303 - - CRC: 1777278850 - Mapper: 303 - CRC: 3928297892 Mapper: 4 - CRC: 200667698 Mapper: 4 - - CRC: 2826142274 - Mapper: 417 - - CRC: 201502440 - Mapper: 308 - CRC: 3232125176 Mapper: 7 - CRC: 3178622329 @@ -12647,12 +10173,6 @@ MonoBehaviour: Mapper: 127 - CRC: 79917586 Mapper: 1 - - CRC: 2340171618 - Mapper: 305 - - CRC: 3659909315 - Mapper: 529 - - CRC: 671078114 - Mapper: 529 - CRC: 3484558566 Mapper: 222 - CRC: 881369460 @@ -12663,8 +10183,6 @@ MonoBehaviour: Mapper: 0 - CRC: 3832153539 Mapper: 0 - - CRC: 1789014819 - Mapper: 306 - CRC: 1267307173 Mapper: 142 - CRC: 2722040359 @@ -12681,16 +10199,10 @@ MonoBehaviour: Mapper: 42 - CRC: 1855871120 Mapper: 2 - - CRC: 3506258240 - Mapper: 302 - CRC: 649363972 Mapper: 11 - CRC: 3001661819 Mapper: 4 - - CRC: 2513310858 - Mapper: 312 - - CRC: 2404051114 - Mapper: 418 - CRC: 1564832992 Mapper: 0 - CRC: 1362488034 @@ -12713,8 +10225,6 @@ MonoBehaviour: Mapper: 4 - CRC: 1493703009 Mapper: 0 - - CRC: 3715982866 - Mapper: 415 - CRC: 2909164927 Mapper: 206 - CRC: 3354616174 @@ -12723,8 +10233,6 @@ MonoBehaviour: Mapper: 0 - CRC: 1897712900 Mapper: 0 - - CRC: 260738582 - Mapper: 540 - CRC: 4052491439 Mapper: 3 - CRC: 3867506019 @@ -12767,8 +10275,6 @@ MonoBehaviour: Mapper: 0 - CRC: 3134472150 Mapper: 0 - - CRC: 94527129 - Mapper: 268 - CRC: 1731346871 Mapper: 0 - CRC: 934729485 @@ -12795,8 +10301,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2362948385 Mapper: 4 - - CRC: 1675620548 - Mapper: 268 - CRC: 1498469014 Mapper: 197 - CRC: 921493009 @@ -12805,8 +10309,6 @@ MonoBehaviour: Mapper: 4 - CRC: 3399580341 Mapper: 0 - - CRC: 946383211 - Mapper: 304 - CRC: 825528813 Mapper: 50 - CRC: 1905239058 @@ -12815,8 +10317,6 @@ MonoBehaviour: Mapper: 43 - CRC: 1335622076 Mapper: 43 - - CRC: 2805871997 - Mapper: 368 - CRC: 3392978860 Mapper: 4 - CRC: 209622211 @@ -12859,78 +10359,42 @@ MonoBehaviour: Mapper: 66 - CRC: 3027662904 Mapper: 0 - - CRC: 579174950 - Mapper: 304 - CRC: 586850949 Mapper: 0 - - CRC: 3910323813 - Mapper: 346 - - CRC: 3910096907 - Mapper: 304 - CRC: 4001543146 Mapper: 120 - - CRC: 1441942086 - Mapper: 557 - CRC: 493865374 Mapper: 4 - - CRC: 1027190061 - Mapper: 330 - - CRC: 2352585421 - Mapper: 559 - - CRC: 2553412824 - Mapper: 526 - CRC: 3862964056 Mapper: 4 - CRC: 2079472514 Mapper: 4 - - CRC: 1302858504 - Mapper: 539 - - CRC: 488917570 - Mapper: 347 - CRC: 2338925759 Mapper: 103 - CRC: 492089814 Mapper: 0 - CRC: 423572498 Mapper: 208 - - CRC: 2070101714 - Mapper: 554 - - CRC: 3335923732 - Mapper: 272 - - CRC: 3980268838 - Mapper: 309 - CRC: 151784471 Mapper: 42 - CRC: 1308117029 Mapper: 42 - CRC: 1130819778 Mapper: 171 - - CRC: 1247332271 - Mapper: 525 - CRC: 2411028620 Mapper: 132 - CRC: 3871193868 Mapper: 183 - CRC: 3920647414 Mapper: 86 - - CRC: 348132794 - Mapper: 307 - - CRC: 293089573 - Mapper: 535 - - CRC: 784725186 - Mapper: 549 - CRC: 3623954834 Mapper: 108 - CRC: 4213640086 Mapper: 3 - - CRC: 302865004 - Mapper: 522 - CRC: 2785598978 Mapper: 85 - CRC: 2857930057 Mapper: 3 - - CRC: 2875008584 - Mapper: 326 - CRC: 2442689345 Mapper: 0 - CRC: 1787950953 @@ -12989,8 +10453,6 @@ MonoBehaviour: Mapper: 4 - CRC: 51089114 Mapper: 4 - - CRC: 2923753374 - Mapper: 266 - CRC: 4038178152 Mapper: 4 - CRC: 903481863 @@ -13233,8 +10695,6 @@ MonoBehaviour: Mapper: 40 - CRC: 2558499002 Mapper: 196 - - CRC: 1151612373 - Mapper: 530 - CRC: 4056190305 Mapper: 196 - CRC: 1467636842 @@ -13255,8 +10715,6 @@ MonoBehaviour: Mapper: 0 - CRC: 2423023032 Mapper: 0 - - CRC: 1384403497 - Mapper: 538 - CRC: 293937499 Mapper: 0 - CRC: 2003548228 @@ -14173,8 +11631,6 @@ MonoBehaviour: Mapper: 0 - CRC: 4013000706 Mapper: 0 - - CRC: 1985064425 - Mapper: 268 - CRC: 3840439495 Mapper: 3 - CRC: 1512708621 @@ -14481,8 +11937,6 @@ MonoBehaviour: Mapper: 45 - CRC: 2787944601 Mapper: 176 - - CRC: 2267727501 - Mapper: 445 - CRC: 2721292593 Mapper: 176 - CRC: 3041985453 @@ -14527,8 +11981,6 @@ MonoBehaviour: Mapper: 90 - CRC: 89537333 Mapper: 4 - - CRC: 2143428855 - Mapper: 290 - CRC: 3460759642 Mapper: 4 - CRC: 776207015 @@ -14633,8 +12085,6 @@ MonoBehaviour: Mapper: 121 - CRC: 973228842 Mapper: 2 - - CRC: 2537479175 - Mapper: 256 - CRC: 370187152 Mapper: 90 - CRC: 2894197833 @@ -15811,8 +13261,6 @@ MonoBehaviour: Mapper: 2 - CRC: 2514364174 Mapper: 2 - - CRC: 2733918947 - Mapper: 512 - CRC: 1104638070 Mapper: 2 - CRC: 314664851 @@ -16805,22 +14253,6 @@ MonoBehaviour: Mapper: 45 - CRC: 1791026623 Mapper: 45 - - CRC: 980470535 - Mapper: 342 - - CRC: 1397924136 - Mapper: 342 - - CRC: 2250213792 - Mapper: 342 - - CRC: 2723993937 - Mapper: 342 - - CRC: 3815305718 - Mapper: 342 - - CRC: 420563973 - Mapper: 268 - - CRC: 100183299 - Mapper: 268 - - CRC: 2938957251 - Mapper: 268 - CRC: 571377154 Mapper: 45 - CRC: 4207508427 @@ -16841,8 +14273,6 @@ MonoBehaviour: Mapper: 176 - CRC: 3036790535 Mapper: 176 - - CRC: 1240349444 - Mapper: 342 - CRC: 4062099842 Mapper: 45 - CRC: 3023912241 @@ -16863,20 +14293,8 @@ MonoBehaviour: Mapper: 176 - CRC: 2773722134 Mapper: 176 - - CRC: 2089213524 - Mapper: 500 - - CRC: 512227517 - Mapper: 501 - - CRC: 1277664696 - Mapper: 502 - - CRC: 2072348299 - Mapper: 342 - - CRC: 789390029 - Mapper: 342 - CRC: 1384847513 Mapper: 45 - - CRC: 606835224 - Mapper: 342 - CRC: 2049506649 Mapper: 45 - CRC: 571863152 @@ -16885,8 +14303,6 @@ MonoBehaviour: Mapper: 45 - CRC: 2708660288 Mapper: 45 - - CRC: 2630484765 - Mapper: 268 - CRC: 283721406 Mapper: 45 - CRC: 61246409 @@ -16895,12 +14311,8 @@ MonoBehaviour: Mapper: 45 - CRC: 885292953 Mapper: 45 - - CRC: 1893117960 - Mapper: 268 - CRC: 2900062003 Mapper: 45 - - CRC: 3155876263 - Mapper: 268 - CRC: 3596997937 Mapper: 28 - CRC: 1682041078 @@ -16953,8 +14365,6 @@ MonoBehaviour: Mapper: 45 - CRC: 1298461950 Mapper: 45 - - CRC: 2625810435 - Mapper: 268 - CRC: 2802867448 Mapper: 45 - CRC: 375800475 @@ -17191,8 +14601,6 @@ MonoBehaviour: Mapper: 18 - CRC: 3003895396 Mapper: 1 - - CRC: 1721073970 - Mapper: 558 - CRC: 2623300654 Mapper: 4 - CRC: 297924230 @@ -17965,8 +15373,6 @@ MonoBehaviour: Mapper: 0 - CRC: 740130556 Mapper: 33 - - CRC: 766887199 - Mapper: 268 - CRC: 3547923722 Mapper: 1 - CRC: 3052350959 @@ -18253,8 +15659,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2364220407 Mapper: 4 - - CRC: 2290182532 - Mapper: 268 - CRC: 1291945457 Mapper: 2 - CRC: 3911859096 @@ -18513,10 +15917,6 @@ MonoBehaviour: Mapper: 3 - CRC: 3064178916 Mapper: 1 - - CRC: 408941916 - Mapper: 268 - - CRC: 1712367464 - Mapper: 268 - CRC: 3855685921 Mapper: 0 - CRC: 1153505351 @@ -18599,8 +15999,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2134526685 Mapper: 4 - - CRC: 174225481 - Mapper: 368 - CRC: 314611392 Mapper: 2 - CRC: 2932514114 @@ -18937,8 +16335,6 @@ MonoBehaviour: Mapper: 30 - CRC: 1791967837 Mapper: 30 - - CRC: 2522717610 - Mapper: 400 - CRC: 943922166 Mapper: 2 - CRC: 1040402027 @@ -18949,8 +16345,6 @@ MonoBehaviour: Mapper: 30 - CRC: 3635110536 Mapper: 2 - - CRC: 225990324 - Mapper: 268 - CRC: 3308064939 Mapper: 4 - CRC: 206875549 @@ -19021,12 +16415,6 @@ MonoBehaviour: Mapper: 4 - CRC: 3989301446 Mapper: 1 - - CRC: 2660227492 - Mapper: 268 - - CRC: 3672688604 - Mapper: 268 - - CRC: 2855208397 - Mapper: 268 - CRC: 1427743526 Mapper: 3 - CRC: 2427564809 @@ -19049,8 +16437,6 @@ MonoBehaviour: Mapper: 4 - CRC: 2567489225 Mapper: 3 - - CRC: 1128133066 - Mapper: 268 - CRC: 4083617763 Mapper: 0 - CRC: 122467111 @@ -19069,38 +16455,22 @@ MonoBehaviour: Mapper: 4 - CRC: 1609540347 Mapper: 111 - - CRC: 468079916 - Mapper: 268 - CRC: 481807938 Mapper: 1 - CRC: 1931958167 Mapper: 0 - CRC: 4213544156 Mapper: 0 - - CRC: 2955922263 - Mapper: 406 - - CRC: 3405689861 - Mapper: 406 - - CRC: 2167810489 - Mapper: 451 - - CRC: 3433622704 - Mapper: 451 - CRC: 71181637 Mapper: 34 - CRC: 4093760494 Mapper: 4 - CRC: 2808619369 Mapper: 4 - - CRC: 2974378440 - Mapper: 268 - CRC: 13266695 Mapper: 105 - CRC: 1905177610 Mapper: 2 - - CRC: 1025147927 - Mapper: 446 - - CRC: 1855823442 - Mapper: 268 - CRC: 735249033 Mapper: 4 - CRC: 1618566989 @@ -19173,20 +16543,14 @@ MonoBehaviour: Mapper: 30 - CRC: 258908415 Mapper: 0 - - CRC: 1711755518 - Mapper: 268 - CRC: 3370867325 Mapper: 0 - CRC: 1683574179 Mapper: 4 - - CRC: 2110512854 - Mapper: 409 - CRC: 3885476759 Mapper: 30 - CRC: 3005391854 Mapper: 30 - - CRC: 2627238442 - Mapper: 399 - CRC: 2002588876 Mapper: 4 - CRC: 2303697313 @@ -19203,8 +16567,6 @@ MonoBehaviour: Mapper: 0 - CRC: 3865761464 Mapper: 0 - - CRC: 1232890473 - Mapper: 413 - CRC: 1634122625 Mapper: 0 - CRC: 2843659867 @@ -19257,8 +16619,6 @@ MonoBehaviour: Mapper: 24 - CRC: 626025405 Mapper: 23 - - CRC: 51222596 - Mapper: 446 - CRC: 2378961300 Mapper: 23 - CRC: 4114630478 @@ -19807,8 +17167,6 @@ MonoBehaviour: Mapper: 2 - CRC: 3981649515 Mapper: 5 - - CRC: 3300477909 - Mapper: 389 - CRC: 1395822532 Mapper: 2 - CRC: 3429672156 @@ -20375,12 +17733,8 @@ MonoBehaviour: Mapper: 176 - CRC: 1519002535 Mapper: 45 - - CRC: 3331949834 - Mapper: 314 - CRC: 2406271066 Mapper: 4 - - CRC: 648244418 - Mapper: 260 - CRC: 1743831562 Mapper: 45 - CRC: 181388688 @@ -20407,32 +17761,20 @@ MonoBehaviour: Mapper: 52 - CRC: 2836574308 Mapper: 51 - - CRC: 2678106942 - Mapper: 358 - CRC: 1362237882 Mapper: 90 - CRC: 3295660182 Mapper: 90 - CRC: 3911721424 Mapper: 202 - - CRC: 306121822 - Mapper: 256 - CRC: 1647800721 Mapper: 4 - CRC: 285668359 Mapper: 203 - CRC: 3163125874 Mapper: 203 - - CRC: 2262541920 - Mapper: 355 - - CRC: 1323858545 - Mapper: 260 - - CRC: 822648020 - Mapper: 256 - CRC: 434837363 Mapper: 30 - - CRC: 2319853047 - Mapper: 268 - CRC: 1051709458 Mapper: 116 - CRC: 1669047560 @@ -20459,8 +17801,6 @@ MonoBehaviour: Mapper: 11 - CRC: 170874208 Mapper: 15 - - CRC: 1011061661 - Mapper: 355 - CRC: 1192364433 Mapper: 150 - CRC: 4255014358 @@ -20479,16 +17819,10 @@ MonoBehaviour: Mapper: 0 - CRC: 207567219 Mapper: 0 - - CRC: 1592438084 - Mapper: 519 - CRC: 3330467132 Mapper: 79 - CRC: 2646154203 Mapper: 3 - - CRC: 3454474835 - Mapper: 296 - - CRC: 11240558 - Mapper: 256 - CRC: 1931474842 Mapper: 212 - CRC: 3114946283 @@ -20513,18 +17847,12 @@ MonoBehaviour: Mapper: 3 - CRC: 3277101028 Mapper: 69 - - CRC: 3918926531 - Mapper: 268 - CRC: 1537328591 Mapper: 42 - - CRC: 859750640 - Mapper: 268 - CRC: 811100749 Mapper: 99 - CRC: 1733127390 Mapper: 176 - - CRC: 2912742609 - Mapper: 446 - CRC: 283422476 Mapper: 1 - CRC: 4100210101 @@ -20535,8 +17863,6 @@ MonoBehaviour: Mapper: 1 - CRC: 2457719967 Mapper: 23 - - CRC: 2014615153 - Mapper: 256 - CRC: 412230257 Mapper: 0 - CRC: 3406066285 @@ -20561,26 +17887,12 @@ MonoBehaviour: Mapper: 4 - CRC: 1583802052 Mapper: 163 - - CRC: 504933634 - Mapper: 547 - - CRC: 3997610410 - Mapper: 547 - - CRC: 2221355566 - Mapper: 547 - - CRC: 1207017753 - Mapper: 555 - - CRC: 3665616710 - Mapper: 555 - CRC: 1389948444 Mapper: 4 - CRC: 3946865423 Mapper: 221 - CRC: 849085257 Mapper: 0 - - CRC: 1798838743 - Mapper: 256 - - CRC: 3417073541 - Mapper: 371 - CRC: 1477782338 Mapper: 79 - CRC: 448092166 @@ -20595,8 +17907,6 @@ MonoBehaviour: Mapper: 4 - CRC: 45875982 Mapper: 0 - - CRC: 3854150431 - Mapper: 319 - CRC: 817607253 Mapper: 173 - CRC: 3872942573 @@ -20639,12 +17949,8 @@ MonoBehaviour: Mapper: 134 - CRC: 1607107536 Mapper: 45 - - CRC: 3933635241 - Mapper: 311 - CRC: 962323606 Mapper: 3 - - CRC: 2831603581 - Mapper: 538 - CRC: 1850120127 Mapper: 1 - CRC: 2070714464 @@ -20683,8 +17989,6 @@ MonoBehaviour: Mapper: 163 - CRC: 4229993993 Mapper: 163 - - CRC: 186554150 - Mapper: 558 - CRC: 1768790243 Mapper: 163 - CRC: 2669248299 @@ -20697,12 +18001,8 @@ MonoBehaviour: Mapper: 163 - CRC: 2409311032 Mapper: 163 - - CRC: 1844675912 - Mapper: 547 - CRC: 807945220 Mapper: 4 - - CRC: 1872810574 - Mapper: 268 - CRC: 1879207231 Mapper: 4 - CRC: 2234243894 @@ -20725,14 +18025,10 @@ MonoBehaviour: Mapper: 163 - CRC: 400053472 Mapper: 165 - - CRC: 4199394449 - Mapper: 347 - CRC: 2964405693 Mapper: 178 - CRC: 2611288250 Mapper: 163 - - CRC: 4075297820 - Mapper: 558 - CRC: 1104108394 Mapper: 246 - CRC: 1833894074 @@ -20743,14 +18039,10 @@ MonoBehaviour: Mapper: 192 - CRC: 1376687059 Mapper: 4 - - CRC: 3519759158 - Mapper: 344 - CRC: 710888538 Mapper: 132 - CRC: 1289782008 Mapper: 163 - - CRC: 471824592 - Mapper: 558 - CRC: 765699228 Mapper: 163 - CRC: 1704759028 @@ -20765,8 +18057,6 @@ MonoBehaviour: Mapper: 163 - CRC: 3631338470 Mapper: 176 - - CRC: 3054557186 - Mapper: 446 - CRC: 2848544470 Mapper: 15 - CRC: 834781080 diff --git a/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity b/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity index d02b17c..8e9ca8b 100644 --- a/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity +++ b/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity @@ -325,7 +325,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4232056521131536012, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} propertyPath: RomName - value: tortoise4.nes + value: tstd2.nes objectReference: {fileID: 0} - target: {fileID: 4232056521131536013, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} propertyPath: m_Name diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs index 1468598..1c8d76d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs @@ -1,5 +1,6 @@ using AxibugEmuOnline.Client.ClientCore; using System; +using System.IO; using System.Xml.Linq; using UnityEngine; using VirtualNes.Core; @@ -74,8 +75,8 @@ namespace AxibugEmuOnline.Client var db = Resources.Load("NES/ROMDB"); db.Clear(); - var dbFile = Resources.Load("NES/nes20db"); - var xml = XDocument.Parse(dbFile.text); + var xmlStr = File.ReadAllText("nes20db.xml"); + var xml = XDocument.Parse(xmlStr); var games = xml.Element("nes20db").Elements("game"); foreach (var game in games) { @@ -84,9 +85,11 @@ namespace AxibugEmuOnline.Client var mapper = int.Parse($"{game.Element("pcb").Attribute("mapper").Value}"); + if (mapper > 255) continue; db.AddInfo(new RomDB.RomInfo { CRC = crc, Mapper = mapper }); } + UnityEditor.EditorUtility.SetDirty(db); UnityEditor.AssetDatabase.SaveAssets(); } #endif diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab index 97239ec..2c66afb 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab @@ -44,6 +44,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a6a09b6a4cf4c2d4f994a13fd7e89d6f, type: 3} m_Name: m_EditorClassIdentifier: + NesEmu: {fileID: 0} m_as: {fileID: 8726979175317618791} --- !u!82 &8726979175317618791 AudioSource: @@ -256,6 +257,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 83fbe375412d1af4482ae76e81c1dda2, type: 3} m_Name: m_EditorClassIdentifier: + NesEmu: {fileID: 0} Image: {fileID: 4232056521759880274} --- !u!1 &4232056520494431712 GameObject: diff --git a/AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes b/AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes new file mode 100644 index 0000000..3a5f57d Binary files /dev/null and b/AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes differ diff --git a/AxibugEmuOnline.Client/Assets/Resources/NES/nes20db.xml.meta b/AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes.meta similarity index 62% rename from AxibugEmuOnline.Client/Assets/Resources/NES/nes20db.xml.meta rename to AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes.meta index 9728bba..8a69b2d 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/NES/nes20db.xml.meta +++ b/AxibugEmuOnline.Client/Assets/StreamingAssets/NES/Roms/msg.nes.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 31d7b6b33f06e3d468b409ab9e71bf1f -TextScriptImporter: +guid: a5222bc76eba99e4c9fc92b70f4103bc +DefaultImporter: externalObjects: {} userData: assetBundleName: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs index 7cdea83..d67f9c9 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs @@ -4,28 +4,309 @@ namespace VirtualNes.Core { public class APU_FDS : APU_INTERFACE { - private FDSSOUND fds = new FDSSOUND(); - private FDSSOUND fds_sync = new FDSSOUND(); + FDSSOUND fds = new FDSSOUND(); + FDSSOUND fds_sync = new FDSSOUND(); + int[] output_buf = new int[8]; + int sampling_rate; + + public APU_FDS() + { + fds.ZeroMemory(); + fds_sync.ZeroMemory(); + + Array.Clear(output_buf, 0, output_buf.Length); + + sampling_rate = 22050; + } public override void Reset(float fClock, int nRate) { - //todo : 实现 + fds.ZeroMemory(); + fds_sync.ZeroMemory(); + + sampling_rate = 22050; } public override void Setup(float fClock, int nRate) { - //todo : 实现 + sampling_rate = nRate; + } + + int[] tbl_writesub = { 30, 20, 15, 12 }; + + private void WriteSub(ushort addr, byte data, FDSSOUND ch, double rate) + { + if (addr < 0x4040 || addr > 0x40BF) + return; + + ch.reg[addr - 0x4040] = data; + if (addr >= 0x4040 && addr <= 0x407F) + { + if (ch.wave_setup != 0) + { + ch.main_wavetable[addr - 0x4040] = 0x20 - (data & 0x3F); + } + } + else + { + switch (addr) + { + case 0x4080: // Volume Envelope + ch.volenv_mode = (byte)(data >> 6); + if ((data & 0x80) != 0) + { + ch.volenv_gain = (byte)(data & 0x3F); + + // 即時反映 + if (ch.main_addr == 0) + { + ch.now_volume = (ch.volenv_gain < 0x21) ? ch.volenv_gain : 0x20; + } + } + // エンベロープ1段階の演算 + ch.volenv_decay = (byte)(data & 0x3F); + ch.volenv_phaseacc = (double)ch.envelope_speed * (double)(ch.volenv_decay + 1) * rate / (232.0 * 960.0); + break; + + case 0x4082: // Main Frequency(Low) + ch.main_frequency = (ch.main_frequency & ~0x00FF) | data; + break; + case 0x4083: // Main Frequency(High) + ch.main_enable = (byte)((~data) & (1 << 7)); + ch.envelope_enable = (byte)((~data) & (1 << 6)); + if (ch.main_enable == 0) + { + ch.main_addr = 0; + ch.now_volume = (ch.volenv_gain < 0x21) ? ch.volenv_gain : 0x20; + } + // ch.main_frequency = (ch.main_frequency&0x00FF)|(((INT)data&0x3F)<<8); + ch.main_frequency = (ch.main_frequency & 0x00FF) | ((data & 0x0F) << 8); + break; + + case 0x4084: // Sweep Envelope + ch.swpenv_mode = (byte)(data >> 6); + if ((data & 0x80) != 0) + { + ch.swpenv_gain = (byte)(data & 0x3F); + } + // エンベロープ1段階の演算 + ch.swpenv_decay = (byte)(data & 0x3F); + ch.swpenv_phaseacc = (double)ch.envelope_speed * (double)(ch.swpenv_decay + 1) * rate / (232.0 * 960.0); + break; + + case 0x4085: // Sweep Bias + if ((data & 0x40) != 0) ch.sweep_bias = (data & 0x3f) - 0x40; + else ch.sweep_bias = data & 0x3f; + ch.lfo_addr = 0; + break; + + case 0x4086: // Effector(LFO) Frequency(Low) + ch.lfo_frequency = (ch.lfo_frequency & (~0x00FF)) | data; + break; + case 0x4087: // Effector(LFO) Frequency(High) + ch.lfo_enable = (byte)((~data & 0x80)); + ch.lfo_frequency = (ch.lfo_frequency & 0x00FF) | ((data & 0x0F) << 8); + break; + + case 0x4088: // Effector(LFO) wavetable + if (ch.lfo_enable == 0) + { + // FIFO? + for (byte i = 0; i < 31; i++) + { + ch.lfo_wavetable[i * 2 + 0] = ch.lfo_wavetable[(i + 1) * 2 + 0]; + ch.lfo_wavetable[i * 2 + 1] = ch.lfo_wavetable[(i + 1) * 2 + 1]; + } + ch.lfo_wavetable[31 * 2 + 0] = (byte)(data & 0x07); + ch.lfo_wavetable[31 * 2 + 1] = (byte)(data & 0x07); + } + break; + + case 0x4089: // Sound control + { + ch.master_volume = tbl_writesub[data & 3]; + ch.wave_setup = (byte)(data & 0x80); + } + break; + + case 0x408A: // Sound control 2 + ch.envelope_speed = data; + break; + + default: + break; + } + } } public override void Write(ushort addr, byte data) { - //todo : 实现 + WriteSub(addr, data, fds, sampling_rate); } + public override byte Read(ushort addr) + { + byte data = (byte)(addr >> 8); + + if (addr >= 0x4040 && addr <= 0x407F) + { + data = (byte)(fds.main_wavetable[addr & 0x3F] | 0x40); + } + else + if (addr == 0x4090) + { + data = (byte)((fds.volenv_gain & 0x3F) | 0x40); + } + else + if (addr == 0x4092) + { + data = (byte)((fds.swpenv_gain & 0x3F) | 0x40); + } + + return data; + } + + int[] tbl_process = { 0, 1, 2, 4, 0, -4, -2, -1 }; public override int Process(int channel) { - //todo : 实现 - return 0; + // Envelope unit + if (fds.envelope_enable != 0 && fds.envelope_speed != 0) + { + // Volume envelope + if (fds.volenv_mode < 2) + { + double decay = ((double)fds.envelope_speed * (double)(fds.volenv_decay + 1) * (double)sampling_rate) / (232.0 * 960.0); + fds.volenv_phaseacc -= 1.0; + while (fds.volenv_phaseacc < 0.0) + { + fds.volenv_phaseacc += decay; + + if (fds.volenv_mode == 0) + { + // 減少モード + if (fds.volenv_gain != 0) + fds.volenv_gain--; + } + else + if (fds.volenv_mode == 1) + { + if (fds.volenv_gain < 0x20) + fds.volenv_gain++; + } + } + } + + // Sweep envelope + if (fds.swpenv_mode < 2) + { + double decay = ((double)fds.envelope_speed * (double)(fds.swpenv_decay + 1) * (double)sampling_rate) / (232.0 * 960.0); + fds.swpenv_phaseacc -= 1.0; + while (fds.swpenv_phaseacc < 0.0) + { + fds.swpenv_phaseacc += decay; + + if (fds.swpenv_mode == 0) + { + // 減少モード + if (fds.swpenv_gain != 0) + fds.swpenv_gain--; + } + else + if (fds.swpenv_mode == 1) + { + if (fds.swpenv_gain < 0x20) + fds.swpenv_gain++; + } + } + } + } + + // Effector(LFO) unit + int sub_freq = 0; + // if( fds.lfo_enable && fds.envelope_speed && fds.lfo_frequency ) { + if (fds.lfo_enable != 0) + { + if (fds.lfo_frequency != 0) + { + fds.lfo_phaseacc -= (1789772.5 * (double)fds.lfo_frequency) / 65536.0; + while (fds.lfo_phaseacc < 0.0) + { + fds.lfo_phaseacc += (double)sampling_rate; + + if (fds.lfo_wavetable[fds.lfo_addr] == 4) + fds.sweep_bias = 0; + else + fds.sweep_bias += tbl_process[fds.lfo_wavetable[fds.lfo_addr]]; + + fds.lfo_addr = (fds.lfo_addr + 1) & 63; + } + } + + if (fds.sweep_bias > 63) + fds.sweep_bias -= 128; + else if (fds.sweep_bias < -64) + fds.sweep_bias += 128; + + int sub_multi = fds.sweep_bias * fds.swpenv_gain; + + if ((sub_multi & 0x0F) != 0) + { + // 16で割り切れない場合 + sub_multi = (sub_multi / 16); + if (fds.sweep_bias >= 0) + sub_multi += 2; // 正の場合 + else + sub_multi -= 1; // 負の場合 + } + else + { + // 16で割り切れる場合 + sub_multi = (sub_multi / 16); + } + // 193を超えると-258する(-64へラップ) + if (sub_multi > 193) + sub_multi -= 258; + // -64を下回ると+256する(192へラップ) + if (sub_multi < -64) + sub_multi += 256; + + sub_freq = (fds.main_frequency) * sub_multi / 64; + } + + // Main unit + int output = 0; + if (fds.main_enable != 0 && fds.main_frequency != 0 && fds.wave_setup == 0) + { + int freq; + int main_addr_old = fds.main_addr; + + freq = (int)((fds.main_frequency + sub_freq) * 1789772.5 / 65536.0); + + fds.main_addr = (fds.main_addr + freq + 64 * sampling_rate) % (64 * sampling_rate); + + // 1周期を超えたらボリューム更新 + if (main_addr_old > fds.main_addr) + fds.now_volume = (fds.volenv_gain < 0x21) ? fds.volenv_gain : 0x20; + + output = fds.main_wavetable[(fds.main_addr / sampling_rate) & 0x3f] * 8 * fds.now_volume * fds.master_volume / 30; + + if (fds.now_volume != 0) + fds.now_freq = freq * 4; + else + fds.now_freq = 0; + } + else + { + fds.now_freq = 0; + output = 0; + } + + // LPF + output = (output_buf[0] * 2 + output) / 3; + output_buf[0] = output; + + fds.output = output; + return fds.output; } internal void SyncWrite(ushort addr, byte data) @@ -33,10 +314,7 @@ namespace VirtualNes.Core WriteSub(addr, data, fds_sync, 1789772.5d); } - private void WriteSub(ushort addr, byte data, FDSSOUND ch, double rate) - { - //todo : 实现 - } + internal byte SyncRead(ushort addr) { @@ -60,6 +338,71 @@ namespace VirtualNes.Core return data; } + public override bool Sync(int cycles) + { + // Envelope unit + if (fds_sync.envelope_enable != 0 && fds_sync.envelope_speed != 0) + { + // Volume envelope + double decay; + if (fds_sync.volenv_mode < 2) + { + decay = ((double)fds_sync.envelope_speed * (double)(fds_sync.volenv_decay + 1) * 1789772.5) / (232.0 * 960.0); + fds_sync.volenv_phaseacc -= (double)cycles; + while (fds_sync.volenv_phaseacc < 0.0) + { + fds_sync.volenv_phaseacc += decay; + + if (fds_sync.volenv_mode == 0) + { + // 減少モード + if (fds_sync.volenv_gain != 0) + fds_sync.volenv_gain--; + } + else + if (fds_sync.volenv_mode == 1) + { + // 増加モード + if (fds_sync.volenv_gain < 0x20) + fds_sync.volenv_gain++; + } + } + } + + // Sweep envelope + if (fds_sync.swpenv_mode < 2) + { + decay = ((double)fds_sync.envelope_speed * (double)(fds_sync.swpenv_decay + 1) * 1789772.5) / (232.0 * 960.0); + fds_sync.swpenv_phaseacc -= (double)cycles; + while (fds_sync.swpenv_phaseacc < 0.0) + { + fds_sync.swpenv_phaseacc += decay; + + if (fds_sync.swpenv_mode == 0) + { + // 減少モード + if (fds_sync.swpenv_gain != 0) + fds_sync.swpenv_gain--; + } + else + if (fds_sync.swpenv_mode == 1) + { + // 増加モード + if (fds_sync.swpenv_gain < 0x20) + fds_sync.swpenv_gain++; + } + } + } + } + + return false; + } + + public override int GetFreq(int channel) + { + return fds.now_freq; + } + private class FDSSOUND { public byte[] reg = new byte[0x80]; @@ -94,6 +437,36 @@ namespace VirtualNes.Core public int now_volume; public int now_freq; public int output; + + public void ZeroMemory() + { + Array.Clear(reg, 0, reg.Length); + volenv_mode = 0; + volenv_gain = 0; + volenv_decay = 0; + volenv_phaseacc = 0.0; + swpenv_mode = 0; + swpenv_gain = 0; + swpenv_decay = 0; + swpenv_phaseacc = 0.0; + envelope_enable = 0; + envelope_speed = 0; + wave_setup = 0; + master_volume = 0; + Array.Clear(main_wavetable, 0, main_wavetable.Length); + main_enable = 0; + main_frequency = 0; + main_addr = 0; + Array.Clear(lfo_wavetable, 0, lfo_wavetable.Length); + lfo_enable = 0; + lfo_frequency = 0; + lfo_addr = 0; + lfo_phaseacc = 0.0; + sweep_bias = 0; + now_volume = 0; + now_freq = 0; + output = 0; + } } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs index 49ad681..9ed2372 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs @@ -1192,5 +1192,222 @@ namespace VirtualNes.Core break; } } + public class RECTANGLE + { + public byte[] reg = new byte[4]; // register + + public byte enable; // enable + public byte holdnote; // holdnote + public byte volume; // volume + public byte complement; + + // For Render + public int phaseacc; + public int freq; + public int freqlimit; + public int adder; + public int duty; + public int len_count; + + public int nowvolume; + + // For Envelope + public byte env_fixed; + public byte env_decay; + public byte env_count; + public byte dummy0; + public int env_vol; + + // For Sweep + public byte swp_on; + public byte swp_inc; + public byte swp_shift; + public byte swp_decay; + public byte swp_count; + public byte[] dummy1 = new byte[3]; + + // For sync; + public byte[] sync_reg = new byte[4]; + public byte sync_output_enable; + public byte sync_enable; + public byte sync_holdnote; + public byte dummy2; + public int sync_len_count; + + public void ZeroMemory() + { + Array.Clear(reg, 0, reg.Length); + enable = 0; + holdnote = 0; + volume = 0; + complement = 0; + + phaseacc = 0; + freq = 0; + freqlimit = 0; + adder = 0; + duty = 0; + len_count = 0; + + nowvolume = 0; + + env_fixed = 0; + env_decay = 0; + env_count = 0; + dummy0 = 0; + env_vol = 0; + + swp_on = 0; + swp_inc = 0; + swp_shift = 0; + swp_decay = 0; + swp_count = 0; + Array.Clear(dummy1, 0, dummy1.Length); + + Array.Clear(sync_reg, 0, sync_reg.Length); + sync_output_enable = 0; + sync_enable = 0; + sync_holdnote = 0; + dummy2 = 0; + sync_len_count = 0; + } + } + public class TRIANGLE + { + public byte[] reg = new byte[4]; + + public byte enable; + public byte holdnote; + public byte counter_start; + public byte dummy0; + + public int phaseacc; + public int freq; + public int len_count; + public int lin_count; + public int adder; + + public int nowvolume; + + // For sync; + public byte[] sync_reg = new byte[4]; + public byte sync_enable; + public byte sync_holdnote; + public byte sync_counter_start; + // public byte dummy1; + public int sync_len_count; + public int sync_lin_count; + + internal void ZeroMemory() + { + Array.Clear(reg, 0, reg.Length); + + enable = 0; + holdnote = 0; + counter_start = 0; + dummy0 = 0; + phaseacc = 0; + freq = 0; + len_count = 0; + lin_count = 0; + adder = 0; + nowvolume = 0; + Array.Clear(sync_reg, 0, sync_reg.Length); + sync_enable = 0; + sync_holdnote = 0; + sync_counter_start = 0; + + sync_len_count = 0; + sync_lin_count = 0; + } + } + public class DPCM + { + public byte[] reg = new byte[4]; + public byte enable; + public byte looping; + public byte cur_byte; + public byte dpcm_value; + + public int freq; + public int phaseacc; + public int output; + + public ushort address, cache_addr; + public int dmalength, cache_dmalength; + public int dpcm_output_real, dpcm_output_fake, dpcm_output_old, dpcm_output_offset; + + // For sync + public byte[] sync_reg = new byte[4]; + public byte sync_enable; + public byte sync_looping; + public byte sync_irq_gen; + public byte sync_irq_enable; + public int sync_cycles, sync_cache_cycles; + public int sync_dmalength, sync_cache_dmalength; + } + public class NOISE + { + public byte[] reg = new byte[4]; // register + + public byte enable; // enable + public byte holdnote; // holdnote + public byte volume; // volume + public byte xor_tap; + public int shift_reg; + + // For Render + public int phaseacc; + public int freq; + public int len_count; + + public int nowvolume; + public int output; + + // For Envelope + public byte env_fixed; + public byte env_decay; + public byte env_count; + public byte dummy0; + public int env_vol; + + // For sync; + public byte[] sync_reg = new byte[4]; + public byte sync_output_enable; + public byte sync_enable; + public byte sync_holdnote; + public byte dummy1; + public int sync_len_count; + + internal void ZeroMemory() + { + Array.Clear(reg, 0, reg.Length); + + enable = 0; + holdnote = 0; + volume = 0; + xor_tap = 0; + shift_reg = 0; + + phaseacc = 0; + freq = 0; + len_count = 0; + nowvolume = 0; + output = 0; + + env_fixed = 0; + env_decay = 0; + env_count = 0; + dummy0 = 0; + env_vol = 0; + + Array.Clear(sync_reg, 0, sync_reg.Length); + sync_output_enable = 0; + sync_enable = 0; + sync_holdnote = 0; + dummy1 = 0; + sync_len_count = 0; + } + } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs index 6b12383..7ba567f 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs @@ -270,6 +270,35 @@ namespace VirtualNes.Core return 0; } + public override int GetFreq(int channel) + { + if (channel == 0 || channel == 1) + { + RECTANGLE ch = null; + if (channel == 0) ch = ch0; + else ch = ch1; + + if (ch.enable == 0 || ch.vbl_length <= 0) + return 0; + if (ch.freq < INT2FIX(8)) + return 0; + if (ch.fixed_envelope != 0) + { + if (ch.volume == 0) + return 0; + } + else + { + if ((0x0F - ch.env_vol) == 0) + return 0; + } + + return (int)(256.0f * cpu_clock / (FIX2INT(ch.freq) * 16.0f)); + } + + return 0; + } + private int RectangleRender(RECTANGLE ch) { if (ch.enable == 0 || ch.vbl_length <= 0) @@ -358,7 +387,7 @@ namespace VirtualNes.Core Array.Clear(dummy, 0, dummy.Length); vbl_length = 0; } - } + } public class RECTANGLE { diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs index 2fe943e..197fab7 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs @@ -1,26 +1,245 @@ -namespace VirtualNes.Core +using RECTANGLE = VirtualNes.Core.APU_VRC6.RECTANGLE; +using SAWTOOTH = VirtualNes.Core.APU_VRC6.SAWTOOTH; + +namespace VirtualNes.Core { public class APU_N106 : APU_INTERFACE { + RECTANGLE ch0 = new RECTANGLE(); + RECTANGLE ch1 = new RECTANGLE(); + SAWTOOTH ch2 = new SAWTOOTH(); + float cpu_clock; + int cycle_rate; + + public APU_N106() + { + Reset(APU_CLOCK, 22050); + } + public override void Reset(float fClock, int nRate) { - //todo : 实现 + ch0.ZeroMemory(); + ch1.ZeroMemory(); + ch2.ZeroMemory(); + + Setup(fClock, nRate); } public override void Setup(float fClock, int nRate) { - //todo : 实现 + cpu_clock = fClock; + cycle_rate = (int)(fClock * 65536.0f / nRate); } public override void Write(ushort addr, byte data) { - //todo : 实现 + switch (addr) + { + // VRC6 CH0 rectangle + case 0x9000: + ch0.reg[0] = data; + ch0.gate = (byte)(data & 0x80); + ch0.volume = (byte)(data & 0x0F); + ch0.duty_pos = (byte)((data >> 4) & 0x07); + break; + case 0x9001: + ch0.reg[1] = data; + ch0.freq = INT2FIX((((ch0.reg[2] & 0x0F) << 8) | data) + 1); + break; + case 0x9002: + ch0.reg[2] = data; + ch0.enable = (byte)(data & 0x80); + ch0.freq = INT2FIX((((data & 0x0F) << 8) | ch0.reg[1]) + 1); + break; + // VRC6 CH1 rectangle + case 0xA000: + ch1.reg[0] = data; + ch1.gate = (byte)(data & 0x80); + ch1.volume = (byte)(data & 0x0F); + ch1.duty_pos = (byte)((data >> 4) & 0x07); + break; + case 0xA001: + ch1.reg[1] = data; + ch1.freq = INT2FIX((((ch1.reg[2] & 0x0F) << 8) | data) + 1); + break; + case 0xA002: + ch1.reg[2] = data; + ch1.enable = (byte)(data & 0x80); + ch1.freq = INT2FIX((((data & 0x0F) << 8) | ch1.reg[1]) + 1); + break; + // VRC6 CH2 sawtooth + case 0xB000: + ch2.reg[1] = data; + ch2.phaseaccum = (byte)(data & 0x3F); + break; + case 0xB001: + ch2.reg[1] = data; + ch2.freq = INT2FIX((((ch2.reg[2] & 0x0F) << 8) | data) + 1); + break; + case 0xB002: + ch2.reg[2] = data; + ch2.enable = (byte)(data & 0x80); + ch2.freq = INT2FIX((((data & 0x0F) << 8) | ch2.reg[1]) + 1); + // ch2.adder = 0; // クリアするとノイズの原因になる + // ch2.accum = 0; // クリアするとノイズの原因になる + break; + } } public override int Process(int channel) { - //todo : 实现 + switch (channel) + { + case 0: + return RectangleRender(ch0); + case 1: + return RectangleRender(ch1); + case 2: + return SawtoothRender(ch2); + } + return 0; } + + public override int GetFreq(int channel) + { + if (channel == 0 || channel == 1) + { + RECTANGLE ch; + if (channel == 0) ch = ch0; + else ch = ch1; + if (ch.enable == 0 || ch.gate != 0 || ch.volume == 0) + return 0; + if (ch.freq < INT2FIX(8)) + return 0; + return (int)((256.0f * cpu_clock / (FIX2INT(ch.freq) * 16.0f))); + } + if (channel == 2) + { + SAWTOOTH ch = ch2; + if (ch.enable == 0 || ch.phaseaccum == 0) + return 0; + if (ch.freq < INT2FIX(8)) + return 0; + return (int)(256.0f * cpu_clock / (FIX2INT(ch.freq) * 14.0f)); + } + + return 0; + } + + int RectangleRender(RECTANGLE ch) + { + // Enable? + if (ch.enable == 0) + { + ch.output_vol = 0; + ch.adder = 0; + return ch.output_vol; + } + + // Digitized output + if (ch.gate != 0) + { + ch.output_vol = ch.volume << APU_VRC6.RECTANGLE_VOL_SHIFT; + return ch.output_vol; + } + + // 一定以上の周波数は処理しない(無駄) + if (ch.freq < INT2FIX(8)) + { + ch.output_vol = 0; + return ch.output_vol; + } + + ch.phaseacc -= cycle_rate; + if (ch.phaseacc >= 0) + return ch.output_vol; + + int output = ch.volume << APU_VRC6.RECTANGLE_VOL_SHIFT; + + if (ch.freq > cycle_rate) + { + // add 1 step + ch.phaseacc += ch.freq; + ch.adder = (byte)((ch.adder + 1) & 0x0F); + if (ch.adder <= ch.duty_pos) + ch.output_vol = output; + else + ch.output_vol = -output; + } + else + { + // average calculate + int num_times, total; + num_times = total = 0; + while (ch.phaseacc < 0) + { + ch.phaseacc += ch.freq; + ch.adder = (byte)((ch.adder + 1) & 0x0F); + if (ch.adder <= ch.duty_pos) + total += output; + else + total += -output; + num_times++; + } + ch.output_vol = total / num_times; + } + + return ch.output_vol; + } + + int SawtoothRender(SAWTOOTH ch) + { + // Digitized output + if (ch.enable == 0) + { + ch.output_vol = 0; + return ch.output_vol; + } + + // 一定以上の周波数は処理しない(無駄) + if (ch.freq < INT2FIX(9)) + { + return ch.output_vol; + } + + ch.phaseacc -= cycle_rate / 2; + if (ch.phaseacc >= 0) + return ch.output_vol; + + if (ch.freq > cycle_rate / 2) + { + // add 1 step + ch.phaseacc += ch.freq; + if (++ch.adder >= 7) + { + ch.adder = 0; + ch.accum = 0; + } + ch.accum += ch.phaseaccum; + ch.output_vol = ch.accum << APU_VRC6.SAWTOOTH_VOL_SHIFT; + } + else + { + // average calculate + int num_times, total; + num_times = total = 0; + while (ch.phaseacc < 0) + { + ch.phaseacc += ch.freq; + if (++ch.adder >= 7) + { + ch.adder = 0; + ch.accum = 0; + } + ch.accum += ch.phaseaccum; + total += ch.accum << APU_VRC6.SAWTOOTH_VOL_SHIFT; + num_times++; + } + ch.output_vol = (total / num_times); + } + + return ch.output_vol; + } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC6.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC6.cs index 0c42555..cfb7b75 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC6.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC6.cs @@ -245,7 +245,7 @@ namespace VirtualNes.Core return ch.output_vol; } - private class RECTANGLE + public class RECTANGLE { public byte[] reg = new byte[3]; @@ -276,7 +276,7 @@ namespace VirtualNes.Core } } - private class SAWTOOTH + public class SAWTOOTH { public byte[] reg = new byte[3]; diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs index d7acd97..83b2e79 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs @@ -1,5 +1,5 @@ using System; -using System.Net; +using VirtualNes.Core.Emu2413; namespace VirtualNes.Core { @@ -86,7 +86,7 @@ namespace VirtualNes.Core if ((VRC7_OPLL.reg[0x20 + channel] & 0x10) != 0) { - return (int)((256.0d * (double)fno * blkmul[blk]) / ((double)(1 << 18) / (3579545.0 / 72.0))); + return (int)((256.0d * fno * blkmul[blk]) / ((1 << 18) / (3579545.0 / 72.0))); } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs deleted file mode 100644 index 35835b3..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace VirtualNes.Core -{ - public class DPCM - { - public byte[] reg = new byte[4]; - public byte enable; - public byte looping; - public byte cur_byte; - public byte dpcm_value; - - public int freq; - public int phaseacc; - public int output; - - public ushort address, cache_addr; - public int dmalength, cache_dmalength; - public int dpcm_output_real, dpcm_output_fake, dpcm_output_old, dpcm_output_offset; - - // For sync - public byte[] sync_reg = new byte[4]; - public byte sync_enable; - public byte sync_looping; - public byte sync_irq_gen; - public byte sync_irq_enable; - public int sync_cycles, sync_cache_cycles; - public int sync_dmalength, sync_cache_dmalength; - } -} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs.meta deleted file mode 100644 index 08b468c..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/DPCM.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e6289a516ac91b541b2b1807bb07e2b0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs deleted file mode 100644 index 0fa41a4..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; - -namespace VirtualNes.Core -{ - public class NOISE - { - public byte[] reg = new byte[4]; // register - - public byte enable; // enable - public byte holdnote; // holdnote - public byte volume; // volume - public byte xor_tap; - public int shift_reg; - - // For Render - public int phaseacc; - public int freq; - public int len_count; - - public int nowvolume; - public int output; - - // For Envelope - public byte env_fixed; - public byte env_decay; - public byte env_count; - public byte dummy0; - public int env_vol; - - // For sync; - public byte[] sync_reg = new byte[4]; - public byte sync_output_enable; - public byte sync_enable; - public byte sync_holdnote; - public byte dummy1; - public int sync_len_count; - - internal void ZeroMemory() - { - Array.Clear(reg, 0, reg.Length); - - enable = 0; - holdnote = 0; - volume = 0; - xor_tap = 0; - shift_reg = 0; - - phaseacc = 0; - freq = 0; - len_count = 0; - nowvolume = 0; - output = 0; - - env_fixed = 0; - env_decay = 0; - env_count = 0; - dummy0 = 0; - env_vol = 0; - - Array.Clear(sync_reg, 0, sync_reg.Length); - sync_output_enable = 0; - sync_enable = 0; - sync_holdnote = 0; - dummy1 = 0; - sync_len_count = 0; - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs.meta deleted file mode 100644 index 69ea5b5..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/NOISE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8680ce7dbdceb504dbda3b98dbdb1297 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs deleted file mode 100644 index 8d3688e..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; - -namespace VirtualNes.Core -{ - public class RECTANGLE - { - public byte[] reg = new byte[4]; // register - - public byte enable; // enable - public byte holdnote; // holdnote - public byte volume; // volume - public byte complement; - - // For Render - public int phaseacc; - public int freq; - public int freqlimit; - public int adder; - public int duty; - public int len_count; - - public int nowvolume; - - // For Envelope - public byte env_fixed; - public byte env_decay; - public byte env_count; - public byte dummy0; - public int env_vol; - - // For Sweep - public byte swp_on; - public byte swp_inc; - public byte swp_shift; - public byte swp_decay; - public byte swp_count; - public byte[] dummy1 = new byte[3]; - - // For sync; - public byte[] sync_reg = new byte[4]; - public byte sync_output_enable; - public byte sync_enable; - public byte sync_holdnote; - public byte dummy2; - public int sync_len_count; - - public void ZeroMemory() - { - Array.Clear(reg, 0, reg.Length); - enable = 0; - holdnote = 0; - volume = 0; - complement = 0; - - phaseacc = 0; - freq = 0; - freqlimit = 0; - adder = 0; - duty = 0; - len_count = 0; - - nowvolume = 0; - - env_fixed = 0; - env_decay = 0; - env_count = 0; - dummy0 = 0; - env_vol = 0; - - swp_on = 0; - swp_inc = 0; - swp_shift = 0; - swp_decay = 0; - swp_count = 0; - Array.Clear(dummy1, 0, dummy1.Length); - - Array.Clear(sync_reg, 0, sync_reg.Length); - sync_output_enable = 0; - sync_enable = 0; - sync_holdnote = 0; - dummy2 = 0; - sync_len_count = 0; - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs.meta deleted file mode 100644 index 9cbc24b..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/RECTANGLE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e50831f6c445fe489d7e1737269296e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs deleted file mode 100644 index 191a619..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; - -namespace VirtualNes.Core -{ - public class TRIANGLE - { - public byte[] reg = new byte[4]; - - public byte enable; - public byte holdnote; - public byte counter_start; - public byte dummy0; - - public int phaseacc; - public int freq; - public int len_count; - public int lin_count; - public int adder; - - public int nowvolume; - - // For sync; - public byte[] sync_reg = new byte[4]; - public byte sync_enable; - public byte sync_holdnote; - public byte sync_counter_start; - // public byte dummy1; - public int sync_len_count; - public int sync_lin_count; - - internal void ZeroMemory() - { - Array.Clear(reg, 0, reg.Length); - - enable = 0; - holdnote = 0; - counter_start = 0; - dummy0 = 0; - phaseacc = 0; - freq = 0; - len_count = 0; - lin_count = 0; - adder = 0; - nowvolume = 0; - Array.Clear(sync_reg, 0, sync_reg.Length); - sync_enable = 0; - sync_holdnote = 0; - sync_counter_start = 0; - - sync_len_count = 0; - sync_lin_count = 0; - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs index 835c758..26527e7 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs @@ -45,7 +45,7 @@ namespace VirtualNes.Core private APU apu; internal R6502 R = new R6502(); private byte[] ZN_Table = new byte[256]; - private ByteArrayRef STACK; + private ArrayRef STACK; public CPU(NES parent) { @@ -2010,7 +2010,7 @@ namespace VirtualNes.Core DMA_cycles = 0; // STACK quick access - STACK = new ByteArrayRef(MMU.RAM, 0x0100, MMU.RAM.Length - 0x100); + STACK = new ArrayRef(MMU.RAM, 0x0100, MMU.RAM.Length - 0x100); // Zero/Negative FLAG ZN_Table[0] = Z_FLAG; diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs index c84dcff..3126a59 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs @@ -2,9 +2,9 @@ namespace VirtualNes.Core { - public class ByteArrayRef + public class ArrayRef { - private byte[] m_rawArray; + private T[] m_rawArray; private int m_offset; private int m_length; @@ -18,30 +18,30 @@ namespace VirtualNes.Core } } - public ByteArrayRef() { } - public ByteArrayRef(byte[] array, int offset, int length) + public ArrayRef() { } + public ArrayRef(T[] array, int offset, int length) { SetArray(array, offset, length); } - public ByteArrayRef(byte[] array) : this(array, 0, array.Length) { } - public ByteArrayRef(byte[] array, int offset) : this(array, offset, array.Length - offset) { } + public ArrayRef(T[] array) : this(array, 0, array.Length) { } + public ArrayRef(T[] array, int offset) : this(array, offset, array.Length - offset) { } - public void SetArray(byte[] array, int offset, int length) + public void SetArray(T[] array, int offset, int length) { m_rawArray = array; m_offset = offset; m_length = length; } - public void SetArray(byte[] array, int offset) + public void SetArray(T[] array, int offset) { m_rawArray = array; m_offset = offset; m_length = array.Length - offset; } - public byte this[int index] + public T this[int index] { get { @@ -53,14 +53,14 @@ namespace VirtualNes.Core } } - public static implicit operator ByteArrayRef(byte[] array) + public static implicit operator ArrayRef(T[] array) { - return new ByteArrayRef(array); + return new ArrayRef(array); } - public static implicit operator Span(ByteArrayRef array) + public static implicit operator Span(ArrayRef array) { - return new Span(array.m_rawArray, array.Offset, array.m_length); + return new Span(array.m_rawArray, array.Offset, array.m_length); } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.cs deleted file mode 100644 index d37e6ec..0000000 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; - -namespace VirtualNes.Core -{ - public class OPLL_PATCH - { - public uint TL, FB, EG, ML, AR, DR, SL, RR, KR, KL, AM, PM, WF; - } - - public class OPLL_SLOT - { - public OPLL_PATCH patch; - - public int type; /* 0 : modulator 1 : carrier */ - - /* OUTPUT */ - public Int32 feedback; - public Int32[] output = new Int32[5]; /* Output value of slot */ - - /* for Phase Generator (PG) */ - public UInt32 sintbl; /* Wavetable */ - public UInt32 phase; /* Phase */ - public UInt32 dphase; /* Phase increment amount */ - public UInt32 pgout; /* output */ - - /* for Envelope Generator (EG) */ - public int fnum; /* F-Number */ - public int block; /* Block */ - public int volume; /* Current volume */ - public int sustine; /* Sustine 1 = ON, 0 = OFF */ - public UInt32 tll; /* Total Level + Key scale level*/ - public UInt32 rks; /* Key scale offset (Rks) */ - public int eg_mode; /* Current state */ - public UInt32 eg_phase; /* Phase */ - public UInt32 eg_dphase; /* Phase increment amount */ - public UInt32 egout; /* output */ - - - /* refer to opll-> */ - public UInt32 plfo_pm; - public UInt32 plfo_am; - } - - public class OPLL_CH - { - public int patch_number; - public int key_status; - public OPLL_SLOT mod; - public OPLL_SLOT car; - } - - public class OPLL - { - public UInt32 adr; - public Int32[] output = new Int32[2]; - - /* Register */ - public byte[] reg = new byte[0x40]; - public int[] slot_on_flag = new int[18]; - - /* Rythm Mode : 0 = OFF, 1 = ON */ - public int rythm_mode; - - /* Pitch Modulator */ - public UInt32 pm_phase; - public Int32 lfo_pm; - - /* Amp Modulator */ - public Int32 am_phase; - public Int32 lfo_am; - - /* Noise Generator */ - public UInt32 noise_seed; - public UInt32 whitenoise; - public UInt32 noiseA; - public UInt32 noiseB; - public UInt32 noiseA_phase; - public UInt32 noiseB_phase; - public UInt32 noiseA_idx; - public UInt32 noiseB_idx; - public UInt32 noiseA_dphase; - public UInt32 noiseB_dphase; - - public int masterVolume; /* 0min -- 64 -- 127 max (Liner) */ - } - - public static class Emu2413API - { - /* Bits for Pitch and Amp modulator */ - public const int PM_PG_BITS = 8; - public const int PM_PG_WIDTH = 1 << PM_PG_BITS; - public const int PM_DP_BITS = 16; - public const int PM_DP_WIDTH = (1 << PM_DP_BITS); - public const int AM_PG_BITS = 8; - public const int AM_PG_WIDTH = (1 << AM_PG_BITS); - public const int AM_DP_BITS = 16; - public const int AM_DP_WIDTH = (1 << AM_DP_BITS); - - /* PM table is calcurated by PM_AMP * pow(2,PM_DEPTH*sin(x)/1200) */ - public const int PM_AMP_BITS = 8; - public const int PM_AMP = (1 << PM_AMP_BITS); - - /* PM speed(Hz) and depth(cent) */ - public const double PM_SPEED = 6.4d; - public const double PM_DEPTH = 13.75d; - - public const int OPLL_2413_TONE = 0; - public const int OPLL_VRC7_TONE = 1; - - static int[] pmtable = new int[PM_PG_WIDTH]; - static int[] amtable = new int[AM_PG_WIDTH]; - - public static void OPLL_init(UInt32 c, UInt32 r) - { - makePmTable(); - makeAmTable(); - makeDB2LinTable(); - makeAdjustTable(); - makeTllTable(); - makeRksTable(); - makeSinTable(); - makeDefaultPatch(); - OPLL_setClock(c, r); - } - - internal static void OPLL_setClock(uint c, uint r) - { - throw new NotImplementedException(); - } - - private static void makeDefaultPatch() - { - throw new NotImplementedException(); - } - - private static void makeSinTable() - { - throw new NotImplementedException(); - } - - private static void makeRksTable() - { - throw new NotImplementedException(); - } - - private static void makeTllTable() - { - throw new NotImplementedException(); - } - - private static void makeAdjustTable() - { - throw new NotImplementedException(); - } - - private static void makeDB2LinTable() - { - throw new NotImplementedException(); - } - - private static void makeAmTable() - { - throw new NotImplementedException(); - } - - private static void makePmTable() - { - int i; - - for (i = 0; i < PM_PG_WIDTH; i++) - pmtable[i] = (int)(PM_AMP * Math.Pow(2, PM_DEPTH * Math.Sin(2.0 * Math.PI * i / PM_PG_WIDTH) / 1200)); - } - - internal static OPLL OPLL_new() - { - throw new NotImplementedException(); - } - - internal static void OPLL_reset(OPLL vRC7_OPLL) - { - throw new NotImplementedException(); - } - - internal static void OPLL_reset_patch(OPLL vRC7_OPLL, int oPLL_VRC7_TONE) - { - throw new NotImplementedException(); - } - - internal static void OPLL_delete(OPLL vRC7_OPLL) - { - throw new NotImplementedException(); - } - - internal static void OPLL_writeReg(OPLL opll, UInt32 reg, UInt32 data) - { - throw new NotImplementedException(); - } - - internal static int OPLL_calc(OPLL opll) - { - throw new NotImplementedException(); - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.meta new file mode 100644 index 0000000..3a84c86 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5b90f721bfc1ac4ea985c0f564d1c6e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413.cs new file mode 100644 index 0000000..bcea6fd --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413.cs @@ -0,0 +1,1545 @@ +using System; +using System.Runtime.ConstrainedExecution; +using System.Runtime.Remoting.Lifetime; +namespace VirtualNes.Core.Emu2413 +{ + public static class Emu2413API + { + static sbyte[][] default_inst = Const.Create_Default_Inst(); + + public const int OPLL_TONE_NUM = 2; + + /* Size of Sintable ( 1 -- 18 can be used, but 7 -- 14 recommended.)*/ + public const int PG_BITS = 9; + public const int PG_WIDTH = (1 << PG_BITS); + + /* Phase increment counter */ + public const int DP_BITS = 18; + public const int DP_WIDTH = (1 << DP_BITS); + public const int DP_BASE_BITS = (DP_BITS - PG_BITS); + + /* Dynamic range */ + public const double DB_STEP = 0.375; + public const int DB_BITS = 7; + public const int DB_MUTE = (1 << DB_BITS); + + /* Dynamic range of envelope */ + public const double EG_STEP = 0.375; + public const int EG_BITS = 7; + //public const int EG_MUTE = (1 << EB_BITS); ?? 原文如此 EB_BITS 根本不存在 + public const int EG_MUTE = (1 << EG_BITS); + + /* Dynamic range of total level */ + public const double TL_STEP = 0.75; + public const int TL_BITS = 6; + public const int TL_MUTE = (1 << TL_BITS); + + /* Dynamic range of sustine level */ + public const double SL_STEP = 3.0; + public const int SL_BITS = 4; + public const int SL_MUTE = (1 << SL_BITS); + + static int EG2DB(int d) + { + return (d * (int)(EG_STEP / DB_STEP)); + } + + static uint TL2EG(int d) + { + return (uint)(d * (int)(TL_STEP / EG_STEP)); + } + + static int SL2EG(int d) + { + return (d * (int)(SL_STEP / EG_STEP)); + } + + /* Volume of Noise (dB) */ + public const double DB_NOISE = 24; + + static uint DB_POS(double x) + { + return (uint)(x / DB_STEP); + } + + static uint DB_NEG(double x) + { + return (uint)(DB_MUTE + DB_MUTE + x / DB_STEP); + } + + /* Bits for liner value */ + public const int DB2LIN_AMP_BITS = 10; + public const int SLOT_AMP_BITS = (DB2LIN_AMP_BITS); + + /* Bits for envelope phase incremental counter */ + public const int EG_DP_BITS = 22; + public const int EG_DP_WIDTH = (1 << EG_DP_BITS); + + /* Bits for Pitch and Amp modulator */ + public const int PM_PG_BITS = 8; + public const int PM_PG_WIDTH = 1 << PM_PG_BITS; + public const int PM_DP_BITS = 16; + public const int PM_DP_WIDTH = (1 << PM_DP_BITS); + public const int AM_PG_BITS = 8; + public const int AM_PG_WIDTH = (1 << AM_PG_BITS); + public const int AM_DP_BITS = 16; + public const int AM_DP_WIDTH = (1 << AM_DP_BITS); + + /* Mask */ + static int OPLL_MASK_CH(int x) + { + return 1 << x; + } + public const int OPLL_MASK_HH = 1 << 9; + public const int OPLL_MASK_CYM = (1 << (10)); + public const int OPLL_MASK_TOM = (1 << (11)); + public const int OPLL_MASK_SD = (1 << (12)); + public const int OPLL_MASK_BD = (1 << (13)); + public const int OPLL_MASK_RYTHM = OPLL_MASK_HH | OPLL_MASK_CYM | OPLL_MASK_TOM | OPLL_MASK_SD | OPLL_MASK_BD; + + /* PM table is calcurated by PM_AMP * pow(2,PM_DEPTH*sin(x)/1200) */ + public const int PM_AMP_BITS = 8; + public const int PM_AMP = (1 << PM_AMP_BITS); + + /* PM speed(Hz) and depth(cent) */ + public const double PM_SPEED = 6.4d; + public const double PM_DEPTH = 13.75d; + + /* AM speed(Hz) and depth(dB) */ + public const double AM_SPEED = 3.7; + public const double AM_DEPTH = 4.8; + + /* Cut the lower b bit(s) off. */ + static int HIGHBITS(int c, int b) + { + return c >> b; + } + + /* Leave the lower b bit(s). */ + static int LOWBITS(int c, int b) + { + return c & ((1 << b) - 1); + } + + /* Expand x which is s bits to d bits. */ + static int EXPAND_BITS(int x, int s, int d) + { + return (x << (d - s)); + } + + /* Expand x which is s bits to d bits and fill expanded bits '1' */ + static int EXPAND_BITS_X(int x, int s, int d) + { + return ((x << (d - s)) | ((1 << (d - s)) - 1)); + } + + /* Adjust envelope speed which depends on sampling rate. */ + static uint rate_adjust(int x) + { + return (uint)((double)x * clk / 72 / rate + 0.5); /* +0.5 to round */ + } + + static OPLL_SLOT MOD(this OPLL opll, int x) + { + return opll.ch[x].mod; + } + static OPLL_SLOT CAR(this OPLL opll, int x) + { + return opll.ch[x].car; + } + + /* Sampling rate */ + static uint rate; + /* Input clock */ + static uint clk; + + /* WaveTable for each envelope amp */ + static uint[] fullsintable = new uint[PG_WIDTH]; + static uint[] halfsintable = new uint[PG_WIDTH]; + static uint[] snaretable = new uint[PG_WIDTH]; + + static int[] noiseAtable = new int[64] + { + -1,1,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0, + -1,1,0,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0 + }; + + static int[] noiseBtable = new int[8] + { + -1,1,-1,1,0,0,0,0 + }; + + static uint[][] waveform = new uint[5][] + { + fullsintable, halfsintable,snaretable,null,null + }; + + /* Noise and LFO */ + static uint pm_dphase; + static uint am_dphase; + + /* dB to Liner table */ + static int[] DB2LIN_TABLE = new int[(DB_MUTE + DB_MUTE) * 2]; + + /* Liner to Log curve conversion table (for Attack rate). */ + static uint[] AR_ADJUST_TABLE = new uint[1 << EG_BITS]; + + /* Empty voice data */ + static OPLL_PATCH null_patch = new OPLL_PATCH(); + + /* Basic voice Data */ + static OPLL_PATCH[][] default_patch = Const.Create_Default_Patch(); + + /* Definition of envelope mode */ + enum EnvelopeMode { SETTLE, ATTACK, DECAY, SUSHOLD, SUSTINE, RELEASE, FINISH }; + + /* Phase incr table for Attack */ + static uint[][] dphaseARTable = new uint[16][] + { + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16], + }; + /* Phase incr table for Decay and Release */ + static uint[][] dphaseDRTable = new uint[16][] + { + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16],new uint[16],new uint[16],new uint[16],new uint[16], + new uint[16], + }; + + /* KSL + TL Table */ + static uint[,,,] tllTable = Const.Create_tllTable(); + static int[,,] rksTable = Const.Create_rksTable(); + + /* Phase incr table for PG */ + static uint[,,] dphaseTable = Const.Create_dphaseTable(); + + public const int OPLL_2413_TONE = 0; + public const int OPLL_VRC7_TONE = 1; + + static int[] pmtable = new int[PM_PG_WIDTH]; + static int[] amtable = new int[AM_PG_WIDTH]; + + static int Min(int i, int j) + { + if (i < j) return i; else return j; + } + + /* Table for AR to LogCurve. */ + static void makeAdjustTable() + { + int i; + + AR_ADJUST_TABLE[0] = (1 << EG_BITS); + for (i = 1; i < 128; i++) + AR_ADJUST_TABLE[i] = (uint)((double)(1 << EG_BITS) - 1 - (1 << EG_BITS) * Math.Log(i) / Math.Log(128)); + } + + /* Table for dB(0 -- (1<= DB_MUTE) DB2LIN_TABLE[i] = 0; + DB2LIN_TABLE[i + DB_MUTE + DB_MUTE] = -DB2LIN_TABLE[i]; + } + } + + /* Liner(+0.0 - +1.0) to dB((1< 0) noiseAtable[i] = (int)DB_POS(0); + else if (noiseAtable[i] < 0) noiseAtable[i] = (int)DB_NEG(0); + else noiseAtable[i] = DB_MUTE - 1; + } + + for (i = 0; i < 8; i++) + { + if (noiseBtable[i] > 0) noiseBtable[i] = (int)DB_POS(0); + else if (noiseBtable[i] < 0) noiseBtable[i] = (int)DB_NEG(0); + else noiseBtable[i] = DB_MUTE - 1; + } + + } + + /* Table for Amp Modulator */ + static void makeAmTable() + { + int i; + + for (i = 0; i < AM_PG_WIDTH; i++) + amtable[i] = (int)((double)AM_DEPTH / 2 / DB_STEP * (1.0 + Math.Sin(2.0 * Math.PI * i / PM_PG_WIDTH))); + } + + static uint[] mltable_makeDphaseTable = new uint[16] { 1, 1 * 2, 2 * 2, 3 * 2, 4 * 2, 5 * 2, 6 * 2, 7 * 2, 8 * 2, 9 * 2, 10 * 2, 10 * 2, 12 * 2, 12 * 2, 15 * 2, 15 * 2 }; + /* Phase increment counter table */ + static void makeDphaseTable() + { + uint fnum, block, ML; + + for (fnum = 0; fnum < 512; fnum++) + for (block = 0; block < 8; block++) + for (ML = 0; ML < 16; ML++) + dphaseTable[fnum, block, ML] = rate_adjust((int)((fnum * mltable_makeDphaseTable[ML]) << (int)block) >> (20 - DP_BITS)); + } + + static uint dB2(double x) + { + return (uint)(x * 2); + } + + static uint[] kltable = new uint[16] + { + dB2( 0.000),dB2( 9.000),dB2(12.000),dB2(13.875),dB2(15.000),dB2(16.125),dB2(16.875),dB2(17.625), + dB2(18.000),dB2(18.750),dB2(19.125),dB2(19.500),dB2(19.875),dB2(20.250),dB2(20.625),dB2(21.000) + }; + + static void makeTllTable() + { + int tmp; + int fnum, block, TL, KL; + + for (fnum = 0; fnum < 16; fnum++) + for (block = 0; block < 8; block++) + for (TL = 0; TL < 64; TL++) + for (KL = 0; KL < 4; KL++) + { + if (KL == 0) + { + tllTable[fnum, block, TL, KL] = TL2EG(TL); + } + else + { + tmp = (int)(kltable[fnum] - dB2(3.000) * (7 - block)); + if (tmp <= 0) + tllTable[fnum, block, TL, KL] = TL2EG(TL); + else + tllTable[fnum, block, TL, KL] = (uint)((tmp >> (3 - KL)) / EG_STEP) + TL2EG(TL); + } + } + } + + /* Rate Table for Attack */ + static void makeDphaseARTable() + { + int AR, Rks, RM, RL; + + for (AR = 0; AR < 16; AR++) + for (Rks = 0; Rks < 16; Rks++) + { + RM = AR + (Rks >> 2); + if (RM > 15) RM = 15; + RL = Rks & 3; + switch (AR) + { + case 0: + dphaseARTable[AR][Rks] = 0; + break; + case 15: + dphaseARTable[AR][Rks] = EG_DP_WIDTH; + break; + default: + dphaseARTable[AR][Rks] = rate_adjust((3 * (RL + 4) << (RM + 1))); + break; + } + } + } + + /* Rate Table for Decay */ + static void makeDphaseDRTable() + { + int DR, Rks, RM, RL; + + for (DR = 0; DR < 16; DR++) + for (Rks = 0; Rks < 16; Rks++) + { + RM = DR + (Rks >> 2); + RL = Rks & 3; + if (RM > 15) RM = 15; + switch (DR) + { + case 0: + dphaseDRTable[DR][Rks] = 0; + break; + default: + dphaseDRTable[DR][Rks] = rate_adjust((RL + 4) << (RM - 1)); + break; + } + } + } + + static void makeRksTable() + { + + int fnum8, block, KR; + + for (fnum8 = 0; fnum8 < 2; fnum8++) + for (block = 0; block < 8; block++) + for (KR = 0; KR < 2; KR++) + { + if (KR != 0) + rksTable[fnum8, block, KR] = (block << 1) + fnum8; + else + rksTable[fnum8, block, KR] = block >> 1; + } + } + + private static void makePmTable() + { + int i; + + for (i = 0; i < PM_PG_WIDTH; i++) + pmtable[i] = (int)(PM_AMP * Math.Pow(2, PM_DEPTH * Math.Sin(2.0 * Math.PI * i / PM_PG_WIDTH) / 1200)); + } + + static void dump2patch(ArrayRef dump, ArrayRef patch) + { + patch[0].AM = (uint)((dump[0] >> 7) & 1); + patch[1].AM = (uint)((dump[1] >> 7) & 1); + patch[0].PM = (uint)((dump[0] >> 6) & 1); + patch[1].PM = (uint)((dump[1] >> 6) & 1); + patch[0].EG = (uint)((dump[0] >> 5) & 1); + patch[1].EG = (uint)((dump[1] >> 5) & 1); + patch[0].KR = (uint)((dump[0] >> 4) & 1); + patch[1].KR = (uint)((dump[1] >> 4) & 1); + patch[0].ML = (uint)((dump[0]) & 15); + patch[1].ML = (uint)((dump[1]) & 15); + patch[0].KL = (uint)((dump[2] >> 6) & 3); + patch[1].KL = (uint)((dump[3] >> 6) & 3); + patch[0].TL = (uint)((dump[2]) & 63); + patch[0].FB = (uint)((dump[3]) & 7); + patch[0].WF = (uint)((dump[3] >> 3) & 1); + patch[1].WF = (uint)((dump[3] >> 4) & 1); + patch[0].AR = (uint)((dump[4] >> 4) & 15); + patch[1].AR = (uint)((dump[5] >> 4) & 15); + patch[0].DR = (uint)((dump[4]) & 15); + patch[1].DR = (uint)((dump[5]) & 15); + patch[0].SL = (uint)((dump[6] >> 4) & 15); + patch[1].SL = (uint)((dump[7] >> 4) & 15); + patch[0].RR = (uint)((dump[6]) & 15); + patch[1].RR = (uint)((dump[7]) & 15); + } + + static ArrayRef instSpan = new ArrayRef(); + static ArrayRef patchSpan = new ArrayRef(); + static void makeDefaultPatch() + { + int i, j; + + for (i = 0; i < OPLL_TONE_NUM; i++) + for (j = 0; j < 19; j++) + { + instSpan.SetArray(default_inst[i], j * 16); + patchSpan.SetArray(default_patch[i], j * 2); + dump2patch(instSpan, patchSpan); + } + } + + static uint calc_eg_dphase(OPLL_SLOT slot) + { + + switch ((EnvelopeMode)slot.eg_mode) + { + case EnvelopeMode.ATTACK: + return dphaseARTable[slot.patch.AR][slot.rks]; + + case EnvelopeMode.DECAY: + return dphaseDRTable[slot.patch.DR][slot.rks]; + + case EnvelopeMode.SUSHOLD: + return 0; + + case EnvelopeMode.SUSTINE: + return dphaseDRTable[slot.patch.RR][slot.rks]; + + case EnvelopeMode.RELEASE: + if (slot.sustine != 0) + return dphaseDRTable[5][slot.rks]; + else if (slot.patch.EG != 0) + return dphaseDRTable[slot.patch.RR][slot.rks]; + else + return dphaseDRTable[7][slot.rks]; + + case EnvelopeMode.FINISH: + return 0; + + default: + return 0; + } + } + + public const int SLOT_BD1 = 12; + public const int SLOT_BD2 = 13; + public const int SLOT_HH = 14; + public const int SLOT_SD = 15; + public const int SLOT_TOM = 16; + public const int SLOT_CYM = 17; + + static void UPDATE_PG(OPLL_SLOT S) + { + S.dphase = dphaseTable[S.fnum, S.block, S.patch.ML]; + } + + static void UPDATE_TLL(OPLL_SLOT S) + { + if (S.type == 0) + { + S.tll = tllTable[S.fnum >> 5, S.block, S.patch.TL, S.patch.KL]; + } + else + { + S.tll = tllTable[S.fnum >> 5, S.block, S.volume, S.patch.KL]; + } + } + + static void UPDATE_RKS(OPLL_SLOT S) + { + S.rks = (uint)rksTable[(S.fnum) >> 8, S.block, S.patch.KR]; + } + + static void UPDATE_WF(OPLL_SLOT S) + { + S.sintbl = waveform[S.patch.WF]; + } + + static void UPDATE_EG(OPLL_SLOT S) + { + S.eg_dphase = calc_eg_dphase(S); + } + + static void UPDATE_ALL(OPLL_SLOT S) + { + UPDATE_PG(S); + UPDATE_TLL(S); + UPDATE_RKS(S); + UPDATE_WF(S); + UPDATE_EG(S); /* G should be last */ + } + + /* Force Refresh (When external program changes some parameters). */ + static void OPLL_forceRefresh(OPLL opll) + { + int i; + + if (opll == null) return; + + for (i = 0; i < 18; i++) + { + UPDATE_PG(opll.slot[i]); + UPDATE_RKS(opll.slot[i]); + UPDATE_TLL(opll.slot[i]); + UPDATE_WF(opll.slot[i]); + UPDATE_EG(opll.slot[i]); + } + } + + /* Slot key on */ + static void slotOn(OPLL_SLOT slot) + { + slot.eg_mode = (int)EnvelopeMode.ATTACK; + slot.phase = 0; + slot.eg_phase = 0; + } + + /* Slot key off */ + static void slotOff(OPLL_SLOT slot) + { + if (slot.eg_mode == (int)EnvelopeMode.ATTACK) + slot.eg_phase = (uint)EXPAND_BITS((int)AR_ADJUST_TABLE[HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS)], EG_BITS, EG_DP_BITS); + slot.eg_mode = (int)EnvelopeMode.RELEASE; + } + + /* Channel key on */ + static void keyOn(OPLL opll, int i) + { + if (opll.slot_on_flag[i * 2] == 0) slotOn(opll.MOD(i)); + if (opll.slot_on_flag[i * 2 + 1] == 0) slotOn(opll.CAR(i)); + opll.ch[i].key_status = 1; + } + + static void keyOff(OPLL opll, int i) + { + if (opll.slot_on_flag[i * 2 + 1] != 0) slotOff(opll.CAR(i)); + opll.ch[i].key_status = 0; + } + + static void keyOn_BD(OPLL opll) { keyOn(opll, 6); } + static void keyOn_SD(OPLL opll) { if (opll.slot_on_flag[SLOT_SD] == 0) slotOn(opll.CAR(7)); } + static void keyOn_TOM(OPLL opll) { if (opll.slot_on_flag[SLOT_TOM] == 0) slotOn(opll.MOD(8)); } + static void keyOn_HH(OPLL opll) { if (opll.slot_on_flag[SLOT_HH] == 0) slotOn(opll.MOD(7)); } + static void keyOn_CYM(OPLL opll) { if (opll.slot_on_flag[SLOT_CYM] == 0) slotOn(opll.CAR(8)); } + + /* Drum key off */ + + static void keyOff_BD(OPLL opll) { keyOff(opll, 6); } + static void keyOff_SD(OPLL opll) { if (opll.slot_on_flag[SLOT_SD] != 0) slotOff(opll.CAR(7)); } + static void keyOff_TOM(OPLL opll) { if (opll.slot_on_flag[SLOT_TOM] != 0) slotOff(opll.MOD(8)); } + static void keyOff_HH(OPLL opll) { if (opll.slot_on_flag[SLOT_HH] != 0) slotOff(opll.MOD(7)); } + static void keyOff_CYM(OPLL opll) { if (opll.slot_on_flag[SLOT_CYM] != 0) slotOff(opll.CAR(8)); } + + /* Change a voice */ + static void setPatch(OPLL opll, int i, int num) + { + opll.ch[i].patch_number = num; + opll.MOD(i).patch = opll.patch[num * 2 + 0]; + opll.CAR(i).patch = opll.patch[num * 2 + 1]; + } + + /* Change a rythm voice */ + static void setSlotPatch(OPLL_SLOT slot, OPLL_PATCH patch) + { + slot.patch = patch; + } + + /* Set sustine parameter */ + static void setSustine(OPLL opll, int c, int sustine) + { + opll.CAR(c).sustine = sustine; + if (opll.MOD(c).type != 0) opll.MOD(c).sustine = sustine; + } + + /* Volume : 6bit ( Volume register << 2 ) */ + static void setVolume(OPLL opll, int c, int volume) + { + opll.CAR(c).volume = volume; + } + + static void setSlotVolume(OPLL_SLOT slot, int volume) + { + slot.volume = volume; + } + + /* Set F-Number ( fnum : 9bit ) */ + static void setFnumber(OPLL opll, int c, int fnum) + { + opll.CAR(c).fnum = fnum; + opll.MOD(c).fnum = fnum; + } + + /* Set Block data (block : 3bit ) */ + static void setBlock(OPLL opll, int c, int block) + { + opll.CAR(c).block = block; + opll.MOD(c).block = block; + } + + /* Change Rythm Mode */ + static void setRythmMode(OPLL opll, int mode) + { + opll.rythm_mode = mode; + + if (mode != 0) + { + opll.ch[6].patch_number = 16; + opll.ch[7].patch_number = 17; + opll.ch[8].patch_number = 18; + setSlotPatch(opll.slot[SLOT_BD1], opll.patch[16 * 2 + 0]); + setSlotPatch(opll.slot[SLOT_BD2], opll.patch[16 * 2 + 1]); + setSlotPatch(opll.slot[SLOT_HH], opll.patch[17 * 2 + 0]); + setSlotPatch(opll.slot[SLOT_SD], opll.patch[17 * 2 + 1]); + opll.slot[SLOT_HH].type = 1; + setSlotPatch(opll.slot[SLOT_TOM], opll.patch[18 * 2 + 0]); + setSlotPatch(opll.slot[SLOT_CYM], opll.patch[18 * 2 + 1]); + opll.slot[SLOT_TOM].type = 1; + } + else + { + setPatch(opll, 6, opll.reg[0x36] >> 4); + setPatch(opll, 7, opll.reg[0x37] >> 4); + opll.slot[SLOT_HH].type = 0; + setPatch(opll, 8, opll.reg[0x38] >> 4); + opll.slot[SLOT_TOM].type = 0; + } + + if (opll.slot_on_flag[SLOT_BD1] == 0) + opll.slot[SLOT_BD1].eg_mode = (int)EnvelopeMode.FINISH; + if (opll.slot_on_flag[SLOT_BD2] == 0) + opll.slot[SLOT_BD2].eg_mode = (int)EnvelopeMode.FINISH; + if (opll.slot_on_flag[SLOT_HH] == 0) + opll.slot[SLOT_HH].eg_mode = (int)EnvelopeMode.FINISH; + if (opll.slot_on_flag[SLOT_SD] == 0) + opll.slot[SLOT_SD].eg_mode = (int)EnvelopeMode.FINISH; + if (opll.slot_on_flag[SLOT_TOM] == 0) + opll.slot[SLOT_TOM].eg_mode = (int)EnvelopeMode.FINISH; + if (opll.slot_on_flag[SLOT_CYM] == 0) + opll.slot[SLOT_CYM].eg_mode = (int)EnvelopeMode.FINISH; + } + + static void OPLL_copyPatch(OPLL opll, int num, OPLL_PATCH patch) + { + opll.patch[num].Copy(patch); + } + + static void OPLL_SLOT_reset(OPLL_SLOT slot) + { + slot.sintbl = waveform[0]; + slot.phase = 0; + slot.dphase = 0; + slot.output[0] = 0; + slot.output[1] = 0; + slot.feedback = 0; + slot.eg_mode = (int)EnvelopeMode.SETTLE; + slot.eg_phase = EG_DP_WIDTH; + slot.eg_dphase = 0; + slot.rks = 0; + slot.tll = 0; + slot.sustine = 0; + slot.fnum = 0; + slot.block = 0; + slot.volume = 0; + slot.pgout = 0; + slot.egout = 0; + slot.patch = null_patch; + } + + static OPLL_SLOT OPLL_SLOT_new() + { + OPLL_SLOT slot; + slot = new OPLL_SLOT(); + + return slot; + } + + static void OPLL_SLOT_delete(OPLL_SLOT slot) + { + //free(slot); // c# just do nothing + } + + static void OPLL_CH_reset(OPLL_CH ch) + { + if (ch.mod != null) OPLL_SLOT_reset(ch.mod); + if (ch.car != null) OPLL_SLOT_reset(ch.car); + ch.key_status = 0; + } + + static OPLL_CH OPLL_CH_new() + { + OPLL_CH ch; + OPLL_SLOT mod, car; + + mod = OPLL_SLOT_new(); + if (mod == null) return null; + + car = OPLL_SLOT_new(); + if (car == null) + { + OPLL_SLOT_delete(mod); + return null; + } + + ch = new OPLL_CH(); + if (ch == null) + { + OPLL_SLOT_delete(mod); + OPLL_SLOT_delete(car); + return null; + } + + mod.type = 0; + car.type = 1; + ch.mod = mod; + ch.car = car; + + return ch; + } + + static void OPLL_CH_delete(OPLL_CH ch) + { + OPLL_SLOT_delete(ch.mod); + OPLL_SLOT_delete(ch.car); + //free(ch); C# just do nothing + } + + public static OPLL OPLL_new() + { + OPLL opll; + OPLL_CH[] ch = new OPLL_CH[9]; + OPLL_PATCH[] patch = new OPLL_PATCH[19 * 2]; + int i, j; + + for (i = 0; i < 19 * 2; i++) + { + patch[i] = new OPLL_PATCH(); + } + + for (i = 0; i < 9; i++) + { + ch[i] = OPLL_CH_new(); + } + + opll = new OPLL(); + + for (i = 0; i < 19 * 2; i++) + opll.patch[i] = patch[i]; + + + for (i = 0; i < 9; i++) + { + opll.ch[i] = ch[i]; + opll.slot[i * 2 + 0] = opll.ch[i].mod; + opll.slot[i * 2 + 1] = opll.ch[i].car; + } + + for (i = 0; i < 18; i++) + { + opll.slot[i].SetHost(opll); + } + + opll.mask = 0; + + OPLL_reset(opll); + OPLL_reset_patch(opll, 0); + + opll.masterVolume = 32; + + return opll; + } + + public static void OPLL_delete(OPLL opll) + { + int i; + + for (i = 0; i < 9; i++) + OPLL_CH_delete(opll.ch[i]); + + //for (i = 0; i < 19 * 2; i++) + // free(opll->patch[i]); + + //free(opll); + } + + /* Reset patch datas by system default. */ + public static void OPLL_reset_patch(OPLL opll, int type) + { + int i; + + for (i = 0; i < 19 * 2; i++) + OPLL_copyPatch(opll, i, default_patch[type % OPLL_TONE_NUM][i]); + } + + /* Reset whole of OPLL except patch datas. */ + public static void OPLL_reset(OPLL opll) + { + int i; + + if (opll == null) return; + + opll.adr = 0; + + opll.output[0] = 0; + opll.output[1] = 0; + + opll.pm_phase = 0; + opll.am_phase = 0; + + opll.noise_seed = 0xffff; + opll.noiseA = 0; + opll.noiseB = 0; + opll.noiseA_phase = 0; + opll.noiseB_phase = 0; + opll.noiseA_dphase = 0; + opll.noiseB_dphase = 0; + opll.noiseA_idx = 0; + opll.noiseB_idx = 0; + + for (i = 0; i < 9; i++) + { + OPLL_CH_reset(opll.ch[i]); + setPatch(opll, i, 0); + } + + for (i = 0; i < 0x40; i++) OPLL_writeReg(opll, (uint)i, 0); + } + + public static void OPLL_setClock(uint c, uint r) + { + clk = c; + rate = r; + makeDphaseTable(); + makeDphaseARTable(); + makeDphaseDRTable(); + pm_dphase = rate_adjust((int)(PM_SPEED * PM_DP_WIDTH / (clk / 72))); + am_dphase = rate_adjust((int)(AM_SPEED * AM_DP_WIDTH / (clk / 72))); + } + + public static void OPLL_init(uint c, uint r) + { + makePmTable(); + makeAmTable(); + makeDB2LinTable(); + makeAdjustTable(); + makeTllTable(); + makeRksTable(); + makeSinTable(); + makeDefaultPatch(); + OPLL_setClock(c, r); + } + static void OPLL_close() + { + } + + static int wave2_2pi(int e) + { + return (e) >> (SLOT_AMP_BITS - PG_BITS); + } + + static int wave2_4pi(int e) + { + return e; + } + + static int wave2_8pi(int e) + { + return (e) << (2 + PG_BITS - SLOT_AMP_BITS); + } + + /* 16bit rand */ + static uint mrand(uint seed) + { + return ((seed >> 15) ^ ((seed >> 12) & 1)) | ((seed << 1) & 0xffff); + } + + static uint DEC(uint db) + { + if (db < DB_MUTE + DB_MUTE) + { + return (uint)Min((int)(db + DB_POS(0.375 * 2)), DB_MUTE - 1); + } + else + { + return (uint)Min((int)(db + DB_POS(0.375 * 2)), DB_MUTE + DB_MUTE + DB_MUTE - 1); + } + } + + /* Update Noise unit */ + static void update_noise(OPLL opll) + { + opll.noise_seed = mrand(opll.noise_seed); + opll.whitenoise = opll.noise_seed & 1; + + opll.noiseA_phase = (opll.noiseA_phase + opll.noiseA_dphase); + opll.noiseB_phase = (opll.noiseB_phase + opll.noiseB_dphase); + + if (opll.noiseA_phase < (1 << 11)) + { + if (opll.noiseA_phase > 16) opll.noiseA = DB_MUTE - 1; + } + else + { + opll.noiseA_phase &= (1 << 11) - 1; + opll.noiseA_idx = (opll.noiseA_idx + 1) & 63; + opll.noiseA = (uint)noiseAtable[opll.noiseA_idx]; + } + + if (opll.noiseB_phase < (1 << 12)) + { + if (opll.noiseB_phase > 16) opll.noiseB = DB_MUTE - 1; + } + else + { + opll.noiseB_phase &= (1 << 12) - 1; + opll.noiseB_idx = (opll.noiseB_idx + 1) & 7; + opll.noiseB = (uint)noiseBtable[opll.noiseB_idx]; + } + } + + /* Update AM, PM unit */ + static void update_ampm(OPLL opll) + { + opll.pm_phase = (opll.pm_phase + pm_dphase) & (PM_DP_WIDTH - 1); + opll.am_phase = (int)(opll.am_phase + am_dphase) & (AM_DP_WIDTH - 1); + opll.lfo_am = amtable[HIGHBITS(opll.am_phase, AM_DP_BITS - AM_PG_BITS)]; + opll.lfo_pm = pmtable[HIGHBITS((int)(opll.pm_phase), PM_DP_BITS - PM_PG_BITS)]; + } + + /* PG */ + static uint calc_phase(OPLL_SLOT slot) + { + if (slot.patch.PM != 0) + slot.phase = (uint)(slot.phase + (slot.dphase * (slot.plfo_pm)) >> PM_AMP_BITS); + else + slot.phase += slot.dphase; + + slot.phase &= (DP_WIDTH - 1); + + return (uint)HIGHBITS((int)slot.phase, DP_BASE_BITS); + } + + static uint S2E(int x) + { + return (uint)(SL2EG((int)(x / SL_STEP)) << (EG_DP_BITS - EG_BITS)); + } + + static uint[] SL = new uint[16] + { + S2E( 0), S2E( 3), S2E( 6), S2E( 9), S2E(12), S2E(15), S2E(18), S2E(21), + S2E(24), S2E(27), S2E(30), S2E(33), S2E(36), S2E(39), S2E(42), S2E(48) + }; + + /* EG */ + static uint calc_envelope(OPLL_SLOT slot) + { + uint egout; + + switch ((EnvelopeMode)slot.eg_mode) + { + + case EnvelopeMode.ATTACK: + slot.eg_phase += slot.eg_dphase; + if ((EG_DP_WIDTH & slot.eg_phase) != 0) + { + egout = 0; + slot.eg_phase = 0; + slot.eg_mode = (int)EnvelopeMode.DECAY; + UPDATE_EG(slot); + } + else + { + egout = AR_ADJUST_TABLE[HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS)]; + } + break; + + case EnvelopeMode.DECAY: + slot.eg_phase += slot.eg_dphase; + egout = (uint)HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS); + if (slot.eg_phase >= SL[slot.patch.SL]) + { + if (slot.patch.EG != 0) + { + slot.eg_phase = SL[slot.patch.SL]; + slot.eg_mode = (int)EnvelopeMode.SUSHOLD; + UPDATE_EG(slot); + } + else + { + slot.eg_phase = SL[slot.patch.SL]; + slot.eg_mode = (int)EnvelopeMode.SUSTINE; + UPDATE_EG(slot); + } + egout = (uint)HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS); + } + break; + + case EnvelopeMode.SUSHOLD: + egout = (uint)HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS); + if (slot.patch.EG == 0) + { + slot.eg_mode = (int)EnvelopeMode.SUSTINE; + UPDATE_EG(slot); + } + break; + + case EnvelopeMode.SUSTINE: + case EnvelopeMode.RELEASE: + slot.eg_phase += slot.eg_dphase; + egout = (uint)HIGHBITS((int)slot.eg_phase, EG_DP_BITS - EG_BITS); + if (egout >= (1 << EG_BITS)) + { + slot.eg_mode = (int)EnvelopeMode.FINISH; + egout = (1 << EG_BITS) - 1; + } + break; + + case EnvelopeMode.FINISH: + egout = (1 << EG_BITS) - 1; + break; + + default: + egout = (1 << EG_BITS) - 1; + break; + } + + if (slot.patch.AM != 0) egout = (uint)(EG2DB((int)(egout + slot.tll)) + (slot.plfo_am)); + else egout = (uint)EG2DB((int)(egout + slot.tll)); + + if (egout >= DB_MUTE) egout = DB_MUTE - 1; + return egout; + } + + static int calc_slot_car(OPLL_SLOT slot, int fm) + { + slot.egout = calc_envelope(slot); + slot.pgout = calc_phase(slot); + if (slot.egout >= (DB_MUTE - 1)) return 0; + + return DB2LIN_TABLE[slot.sintbl[(slot.pgout + wave2_8pi(fm)) & (PG_WIDTH - 1)] + slot.egout]; + } + + static int calc_slot_mod(OPLL_SLOT slot) + { + int fm; + + slot.output[1] = slot.output[0]; + slot.egout = calc_envelope(slot); + slot.pgout = calc_phase(slot); + + if (slot.egout >= (DB_MUTE - 1)) + { + slot.output[0] = 0; + } + else if (slot.patch.FB != 0) + { + fm = (wave2_4pi(slot.feedback) >> (int)(7 - slot.patch.FB)); + slot.output[0] = DB2LIN_TABLE[slot.sintbl[(slot.pgout + fm) & (PG_WIDTH - 1)] + slot.egout]; + } + else + { + slot.output[0] = DB2LIN_TABLE[slot.sintbl[slot.pgout] + slot.egout]; + } + + slot.feedback = (slot.output[1] + slot.output[0]) >> 1; + + return slot.feedback; + } + + static int calc_slot_tom(OPLL_SLOT slot) + { + slot.egout = calc_envelope(slot); + slot.pgout = calc_phase(slot); + if (slot.egout >= (DB_MUTE - 1)) return 0; + + return DB2LIN_TABLE[slot.sintbl[slot.pgout] + slot.egout]; + } + + /* calc SNARE slot */ + static int calc_slot_snare(OPLL_SLOT slot, uint whitenoise) + { + slot.egout = calc_envelope(slot); + slot.pgout = calc_phase(slot); + if (slot.egout >= (DB_MUTE - 1)) return 0; + + if (whitenoise != 0) + return DB2LIN_TABLE[snaretable[slot.pgout] + slot.egout] + DB2LIN_TABLE[slot.egout + 6]; + else + return DB2LIN_TABLE[snaretable[slot.pgout] + slot.egout]; + } + + static int calc_slot_cym(OPLL_SLOT slot, int a, int b, int c) + { + slot.egout = calc_envelope(slot); + if (slot.egout >= (DB_MUTE - 1)) return 0; + + return DB2LIN_TABLE[slot.egout + a] + + ((DB2LIN_TABLE[slot.egout + b] + DB2LIN_TABLE[slot.egout + c]) >> 2); + } + + static int calc_slot_hat(OPLL_SLOT slot, int a, int b, int c, uint whitenoise) + { + slot.egout = calc_envelope(slot); + if (slot.egout >= (DB_MUTE - 1)) return 0; + + if (whitenoise != 0) + { + return DB2LIN_TABLE[slot.egout + a] + + ((DB2LIN_TABLE[slot.egout + b] + DB2LIN_TABLE[slot.egout + c]) >> 2); + } + else + { + return 0; + } + } + + public static short OPLL_calc(OPLL opll) + { + int inst = 0, perc = 0, @out = 0; + int rythmC = 0, rythmH = 0; + int i; + + update_ampm(opll); + update_noise(opll); + + for (i = 0; i < 6; i++) + if ((opll.mask & OPLL_MASK_CH(i)) == 0 && (opll.CAR(i).eg_mode != (int)EnvelopeMode.FINISH)) + inst += calc_slot_car(opll.CAR(i), calc_slot_mod(opll.MOD(i))); + + if (opll.rythm_mode == 0) + { + for (i = 6; i < 9; i++) + if ((opll.mask & OPLL_MASK_CH(i)) == 0 && (opll.CAR(i).eg_mode != (int)EnvelopeMode.FINISH)) + inst += calc_slot_car(opll.CAR(i), calc_slot_mod(opll.MOD(i))); + } + else + { + opll.MOD(7).pgout = calc_phase(opll.MOD(7)); + opll.CAR(8).pgout = calc_phase(opll.CAR(8)); + if (opll.MOD(7).phase < 256) rythmH = (int)DB_NEG(12.0); else rythmH = DB_MUTE - 1; + if (opll.CAR(8).phase < 256) rythmC = (int)DB_NEG(12.0); else rythmC = DB_MUTE - 1; + + if ((opll.mask & OPLL_MASK_BD) == 0 && (opll.CAR(6).eg_mode != (int)EnvelopeMode.FINISH)) + perc += calc_slot_car(opll.CAR(6), calc_slot_mod(opll.MOD(6))); + + if ((opll.mask & OPLL_MASK_HH) == 0 && (opll.MOD(7).eg_mode != (int)EnvelopeMode.FINISH)) + perc += calc_slot_hat(opll.MOD(7), (int)opll.noiseA, (int)opll.noiseB, rythmH, opll.whitenoise); + + if ((opll.mask & OPLL_MASK_SD) == 0 && (opll.CAR(7).eg_mode != (int)EnvelopeMode.FINISH)) + perc += calc_slot_snare(opll.CAR(7), opll.whitenoise); + + if ((opll.mask & OPLL_MASK_TOM) == 0 && (opll.MOD(8).eg_mode != (int)EnvelopeMode.FINISH)) + perc += calc_slot_tom(opll.MOD(8)); + + if ((opll.mask & OPLL_MASK_CYM) == 0 && (opll.CAR(8).eg_mode != (int)EnvelopeMode.FINISH)) + perc += calc_slot_cym(opll.CAR(8), (int)opll.noiseA, (int)opll.noiseB, rythmC); + } + + inst = (inst >> (SLOT_AMP_BITS - 8)); + perc = (perc >> (SLOT_AMP_BITS - 9)); + + @out = ((inst + perc) * opll.masterVolume) >> 2; + + if (@out > 32767) return 32767; + if (@out < -32768) return -32768; + + return (short)@out; + } + + static uint OPLL_setMask(OPLL opll, uint mask) + { + uint ret; + + if (opll != null) + { + ret = opll.mask; + opll.mask = mask; + return ret; + } + else return 0; + } + + static uint OPLL_toggleMask(OPLL opll, uint mask) + { + uint ret; + + if (opll != null) + { + ret = opll.mask; + opll.mask ^= mask; + return ret; + } + else return 0; + } + + public static void OPLL_writeReg(OPLL opll, uint reg, uint data) + { + + int i, v, ch; + + data = data & 0xff; + reg = reg & 0x3f; + + switch (reg) + { + case 0x00: + opll.patch[0].AM = (data >> 7) & 1; + opll.patch[0].PM = (data >> 6) & 1; + opll.patch[0].EG = (data >> 5) & 1; + opll.patch[0].KR = (data >> 4) & 1; + opll.patch[0].ML = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_PG(opll.MOD(i)); + UPDATE_RKS(opll.MOD(i)); + UPDATE_EG(opll.MOD(i)); + } + } + break; + + case 0x01: + opll.patch[1].AM = (data >> 7) & 1; + opll.patch[1].PM = (data >> 6) & 1; + opll.patch[1].EG = (data >> 5) & 1; + opll.patch[1].KR = (data >> 4) & 1; + opll.patch[1].ML = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_PG(opll.CAR(i)); + UPDATE_RKS(opll.CAR(i)); + UPDATE_EG(opll.CAR(i)); + } + } + break; + + case 0x02: + opll.patch[0].KL = (data >> 6) & 3; + opll.patch[0].TL = (data) & 63; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_TLL(opll.MOD(i)); + } + } + break; + + case 0x03: + opll.patch[1].KL = (data >> 6) & 3; + opll.patch[1].WF = (data >> 4) & 1; + opll.patch[0].WF = (data >> 3) & 1; + opll.patch[0].FB = (data) & 7; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_WF(opll.MOD(i)); + UPDATE_WF(opll.CAR(i)); + } + } + break; + + case 0x04: + opll.patch[0].AR = (data >> 4) & 15; + opll.patch[0].DR = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_EG(opll.MOD(i)); + } + } + break; + + case 0x05: + opll.patch[1].AR = (data >> 4) & 15; + opll.patch[1].DR = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_EG(opll.CAR(i)); + } + } + break; + + case 0x06: + opll.patch[0].SL = (data >> 4) & 15; + opll.patch[0].RR = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_EG(opll.MOD(i)); + } + } + break; + + case 0x07: + opll.patch[1].SL = (data >> 4) & 15; + opll.patch[1].RR = (data) & 15; + for (i = 0; i < 9; i++) + { + if (opll.ch[i].patch_number == 0) + { + UPDATE_EG(opll.CAR(i)); + } + } + break; + + case 0x0e: + + if (opll.rythm_mode != 0) + { + opll.slot_on_flag[SLOT_BD1] = (opll.reg[0x0e] & 0x10) | (opll.reg[0x26] & 0x10); + opll.slot_on_flag[SLOT_BD2] = (opll.reg[0x0e] & 0x10) | (opll.reg[0x26] & 0x10); + opll.slot_on_flag[SLOT_SD] = (opll.reg[0x0e] & 0x08) | (opll.reg[0x27] & 0x10); + opll.slot_on_flag[SLOT_HH] = (opll.reg[0x0e] & 0x01) | (opll.reg[0x27] & 0x10); + opll.slot_on_flag[SLOT_TOM] = (opll.reg[0x0e] & 0x04) | (opll.reg[0x28] & 0x10); + opll.slot_on_flag[SLOT_CYM] = (opll.reg[0x0e] & 0x02) | (opll.reg[0x28] & 0x10); + } + else + { + opll.slot_on_flag[SLOT_BD1] = (opll.reg[0x26] & 0x10); + opll.slot_on_flag[SLOT_BD2] = (opll.reg[0x26] & 0x10); + opll.slot_on_flag[SLOT_SD] = (opll.reg[0x27] & 0x10); + opll.slot_on_flag[SLOT_HH] = (opll.reg[0x27] & 0x10); + opll.slot_on_flag[SLOT_TOM] = (opll.reg[0x28] & 0x10); + opll.slot_on_flag[SLOT_CYM] = (opll.reg[0x28] & 0x10); + } + + if ((((data >> 5) & 1) ^ (opll.rythm_mode)) != 0) + { + setRythmMode(opll, (int)(data & 32) >> 5); + } + + if (opll.rythm_mode != 0) + { + if ((data & 0x10) != 0) keyOn_BD(opll); else keyOff_BD(opll); + if ((data & 0x8) != 0) keyOn_SD(opll); else keyOff_SD(opll); + if ((data & 0x4) != 0) keyOn_TOM(opll); else keyOff_TOM(opll); + if ((data & 0x2) != 0) keyOn_CYM(opll); else keyOff_CYM(opll); + if ((data & 0x1) != 0) keyOn_HH(opll); else keyOff_HH(opll); + } + + UPDATE_ALL(opll.MOD(6)); + UPDATE_ALL(opll.CAR(6)); + UPDATE_ALL(opll.MOD(7)); + UPDATE_ALL(opll.CAR(7)); + UPDATE_ALL(opll.MOD(8)); + UPDATE_ALL(opll.CAR(8)); + break; + + case 0x0f: + break; + + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + ch = (int)(reg - 0x10); + setFnumber(opll, ch, (int)(data + ((opll.reg[0x20 + ch] & 1) << 8))); + UPDATE_ALL(opll.MOD(ch)); + UPDATE_ALL(opll.CAR(ch)); + switch (reg) + { + case 0x17: + opll.noiseA_dphase = (uint)((data + ((opll.reg[0x27] & 1) << 8)) << ((opll.reg[0x27] >> 1) & 7)); + break; + case 0x18: + opll.noiseB_dphase = (uint)((data + ((opll.reg[0x28] & 1) << 8)) << ((opll.reg[0x28] >> 1) & 7)); + break; + default: + break; + } + break; + + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + + ch = (int)(reg - 0x20); + setFnumber(opll, ch, (int)(((data & 1) << 8) + opll.reg[0x10 + ch])); + setBlock(opll, ch, (int)((data >> 1) & 7)); + opll.slot_on_flag[ch * 2] = opll.slot_on_flag[ch * 2 + 1] = (opll.reg[reg]) & 0x10; + + if (opll.rythm_mode != 0) + { + switch (reg) + { + case 0x26: + opll.slot_on_flag[SLOT_BD1] |= (opll.reg[0x0e]) & 0x10; + opll.slot_on_flag[SLOT_BD2] |= (opll.reg[0x0e]) & 0x10; + break; + + case 0x27: + opll.noiseA_dphase = (uint)((int)((data & 1) << 8 + opll.reg[0x17]) << (int)((data >> 1) & 7)); + opll.slot_on_flag[SLOT_SD] |= (opll.reg[0x0e]) & 0x08; + opll.slot_on_flag[SLOT_HH] |= (opll.reg[0x0e]) & 0x01; + break; + + case 0x28: + opll.noiseB_dphase = (uint)((int)((data & 1) << 8) + opll.reg[0x18]) << (int)((data >> 1) & 7); + opll.slot_on_flag[SLOT_TOM] |= (opll.reg[0x0e]) & 0x04; + opll.slot_on_flag[SLOT_CYM] |= (opll.reg[0x0e]) & 0x02; + break; + + default: + break; + } + } + + if (((opll.reg[reg] ^ data) & 0x20) != 0) setSustine(opll, ch, (int)((data >> 5) & 1)); + if ((data & 0x10) != 0) keyOn(opll, ch); else keyOff(opll, ch); + UPDATE_ALL(opll.MOD(ch)); + UPDATE_ALL(opll.CAR(ch)); + break; + + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + i = (int)((data >> 4) & 15); + v = (int)(data & 15); + if ((opll.rythm_mode) != 0 && (reg >= 0x36)) + { + switch (reg) + { + case 0x37: + setSlotVolume(opll.MOD(7), i << 2); + break; + case 0x38: + setSlotVolume(opll.MOD(8), i << 2); + break; + } + } + else + { + setPatch(opll, (int)(reg - 0x30), i); + } + + setVolume(opll, (int)(reg - 0x30), v << 2); + UPDATE_ALL(opll.MOD((int)(reg - 0x30))); + UPDATE_ALL(opll.CAR((int)(reg - 0x30))); + break; + + default: + break; + + } + + opll.reg[reg] = (byte)data; + } + + static void OPLL_writeIO(OPLL opll, uint adr, uint val) + { + adr &= 0xff; + if (adr == 0x7C) opll.adr = val; + else if (adr == 0x7D) OPLL_writeReg(opll, opll.adr, val); + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413.cs.meta rename to AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs new file mode 100644 index 0000000..57ce8e2 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs @@ -0,0 +1,208 @@ +using System; + +namespace VirtualNes.Core.Emu2413 +{ + public static class Const + { + internal static sbyte[][] Create_Default_Inst() + { + unchecked + { + sbyte[][] res = new sbyte[Emu2413API.OPLL_TONE_NUM][] + { + new sbyte[] + { + (sbyte)0x00,(sbyte) 0x00, (sbyte)0x00, (sbyte)0x00,(sbyte) 0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61,(sbyte) 0x61, (sbyte)0x1e, (sbyte)0x17,(sbyte) 0xf0, (sbyte)0x7f, (sbyte)0x07, (sbyte)0x17, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x13,(sbyte) 0x41, (sbyte)0x0f, (sbyte)0x0d,(sbyte) 0xce, (sbyte)0xd2, (sbyte)0x43, (sbyte)0x13, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x03,(sbyte) 0x01, (sbyte)0x99, (sbyte)0x04,(sbyte) 0xff, (sbyte)0xc3, (sbyte)0x03, (sbyte)0x73, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x21,(sbyte) 0x61, (sbyte)0x1b, (sbyte)0x07,(sbyte) 0xaf, (sbyte)0x63, (sbyte)0x40, (sbyte)0x28, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x22,(sbyte) 0x21, (sbyte)0x1e, (sbyte)0x06,(sbyte) 0xf0, (sbyte)0x76, (sbyte)0x08, (sbyte)0x28, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x31,(sbyte) 0x22, (sbyte)0x16, (sbyte)0x05,(sbyte) 0x90, (sbyte)0x71, (sbyte)0x00, (sbyte)0x18, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x21,(sbyte) 0x61, (sbyte)0x1d, (sbyte)0x07,(sbyte) 0x82, (sbyte)0x81, (sbyte)0x10, (sbyte)0x17, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x23,(sbyte) 0x21, (sbyte)0x2d, (sbyte)0x16,(sbyte) 0xc0, (sbyte)0x70, (sbyte)0x07, (sbyte)0x07, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61,(sbyte) 0x21, (sbyte)0x1b, (sbyte)0x06,(sbyte) 0x64, (sbyte)0x65, (sbyte)0x18, (sbyte)0x18, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61,(sbyte) 0x61, (sbyte)0x0c, (sbyte)0x18,(sbyte) 0x85, (sbyte)0xa0, (sbyte)0x79, (sbyte)0x07, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x23,(sbyte) 0x21, (sbyte)0x87, (sbyte)0x11,(sbyte) 0xf0, (sbyte)0xa4, (sbyte)0x00, (sbyte)0xf7, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x97,(sbyte) 0xe1, (sbyte)0x28, (sbyte)0x07,(sbyte) 0xff, (sbyte)0xf3, (sbyte)0x02, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61,(sbyte) 0x10, (sbyte)0x0c, (sbyte)0x05,(sbyte) 0xf2, (sbyte)0xc4, (sbyte)0x40, (sbyte)0xc8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x01,(sbyte) 0x01, (sbyte)0x56, (sbyte)0x03,(sbyte) 0xb4, (sbyte)0xb2, (sbyte)0x23, (sbyte)0x58, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61,(sbyte) 0x41, (sbyte)0x89, (sbyte)0x03,(sbyte) 0xf1, (sbyte)0xf4, (sbyte)0xf0, (sbyte)0x13, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x04,(sbyte) 0x21, (sbyte)0x28, (sbyte)0x00,(sbyte) 0xdf, (sbyte)0xf8, (sbyte)0xff, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x23,(sbyte) 0x22, (sbyte)0x00, (sbyte)0x00,(sbyte) 0xd8, (sbyte)0xf8, (sbyte)0xf8, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x25,(sbyte) 0x18, (sbyte)0x00, (sbyte)0x00,(sbyte) 0xf8, (sbyte)0xda, (sbyte)0xf8, (sbyte)0x55, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + }, + new sbyte[] + { + (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x33, (sbyte)0x01, (sbyte)0x09, (sbyte)0x0e, (sbyte)0x94, (sbyte)0x90, (sbyte)0x40, (sbyte)0x01, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x13, (sbyte)0x41, (sbyte)0x0f, (sbyte)0x0d, (sbyte)0xce, (sbyte)0xd3, (sbyte)0x43, (sbyte)0x13, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x01, (sbyte)0x12, (sbyte)0x1b, (sbyte)0x06, (sbyte)0xff, (sbyte)0xd2, (sbyte)0x00, (sbyte)0x32, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x61, (sbyte)0x61, (sbyte)0x1b, (sbyte)0x07, (sbyte)0xaf, (sbyte)0x63, (sbyte)0x20, (sbyte)0x28, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x22, (sbyte)0x21, (sbyte)0x1e, (sbyte)0x06, (sbyte)0xf0, (sbyte)0x76, (sbyte)0x08, (sbyte)0x28, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x66, (sbyte)0x21, (sbyte)0x15, (sbyte)0x00, (sbyte)0x93, (sbyte)0x94, (sbyte)0x20, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x21, (sbyte)0x61, (sbyte)0x1c, (sbyte)0x07, (sbyte)0x82, (sbyte)0x81, (sbyte)0x10, (sbyte)0x17, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x23, (sbyte)0x21, (sbyte)0x20, (sbyte)0x1f, (sbyte)0xc0, (sbyte)0x71, (sbyte)0x07, (sbyte)0x47, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x25, (sbyte)0x31, (sbyte)0x26, (sbyte)0x05, (sbyte)0x64, (sbyte)0x41, (sbyte)0x18, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x17, (sbyte)0x21, (sbyte)0x28, (sbyte)0x07, (sbyte)0xff, (sbyte)0x83, (sbyte)0x02, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x97, (sbyte)0x81, (sbyte)0x25, (sbyte)0x07, (sbyte)0xcf, (sbyte)0xc8, (sbyte)0x02, (sbyte)0x14, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x21, (sbyte)0x21, (sbyte)0x54, (sbyte)0x0f, (sbyte)0x80, (sbyte)0x7f, (sbyte)0x07, (sbyte)0x07, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x01, (sbyte)0x01, (sbyte)0x56, (sbyte)0x03, (sbyte)0xd3, (sbyte)0xb2, (sbyte)0x43, (sbyte)0x58, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x31, (sbyte)0x21, (sbyte)0x0c, (sbyte)0x03, (sbyte)0x82, (sbyte)0xc0, (sbyte)0x40, (sbyte)0x07, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x21, (sbyte)0x01, (sbyte)0x0c, (sbyte)0x03, (sbyte)0xd4, (sbyte)0xd3, (sbyte)0x40, (sbyte)0x84, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x04, (sbyte)0x21, (sbyte)0x28, (sbyte)0x00, (sbyte)0xdf, (sbyte)0xf8, (sbyte)0xff, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x23, (sbyte)0x22, (sbyte)0x00, (sbyte)0x00, (sbyte)0xa8, (sbyte)0xf8, (sbyte)0xf8, (sbyte)0xf8, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + (sbyte)0x25, (sbyte)0x18, (sbyte)0x00, (sbyte)0x00, (sbyte)0xf8, (sbyte)0xa9, (sbyte)0xf8, (sbyte)0x55, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, (sbyte)0x00, + } + }; + + return res; + } + } + + internal static OPLL_PATCH[][] Create_Default_Patch() + { + OPLL_PATCH[][] res = new OPLL_PATCH[Emu2413API.OPLL_TONE_NUM][] + { + new OPLL_PATCH[(16 + 3) * 2], + new OPLL_PATCH[(16 + 3) * 2], + }; + + for (int x = 0; x < Emu2413API.OPLL_TONE_NUM; x++) + for (int y = 0; y < (16 + 3) * 2; y++) + res[x][y] = new OPLL_PATCH(); + + return res; + } + + internal static uint[,,,] Create_tllTable() + { + var res = new uint[16, 8, 1 << Emu2413API.TL_BITS, 4]; + return res; + } + + internal static Int32[,,] Create_rksTable() + { + return new int[2, 8, 2]; + } + + internal static UInt32[,,] Create_dphaseTable() + { + return new uint[512, 8, 16]; + } + } + public class OPLL_PATCH + { + public uint TL, FB, EG, ML, AR, DR, SL, RR, KR, KL, AM, PM, WF; + + public void Copy(OPLL_PATCH other) + { + TL = other.TL; + FB = other.FB; + EG = other.EG; + ML = other.ML; + AR = other.AR; + DR = other.DR; + SL = other.SL; + RR = other.RR; + KR = other.KR; + KL = other.KL; + AM = other.AM; + PM = other.PM; + WF = other.WF; + } + } + + public class OPLL_SLOT + { + public OPLL_PATCH patch; + + public int type; /* 0 : modulator 1 : carrier */ + + /* OUTPUT */ + public Int32 feedback; + public Int32[] output = new Int32[5]; /* Output value of slot */ + + /* for Phase Generator (PG) */ + public UInt32[] sintbl; /* Wavetable */ + public UInt32 phase; /* Phase */ + public UInt32 dphase; /* Phase increment amount */ + public UInt32 pgout; /* output */ + + /* for Envelope Generator (EG) */ + public int fnum; /* F-Number */ + public int block; /* Block */ + public int volume; /* Current volume */ + public int sustine; /* Sustine 1 = ON, 0 = OFF */ + public UInt32 tll; /* Total Level + Key scale level*/ + public UInt32 rks; /* Key scale offset (Rks) */ + public int eg_mode; /* Current state */ + public UInt32 eg_phase; /* Phase */ + public UInt32 eg_dphase; /* Phase increment amount */ + public UInt32 egout; /* output */ + + + /* refer to opll-> */ + public int plfo_pm => m_host.lfo_pm; + public int plfo_am => m_host.lfo_am; + + private OPLL m_host; + public void SetHost(OPLL host) + { + m_host = host; + } + } + + public class OPLL_CH + { + public int patch_number; + public int key_status; + public OPLL_SLOT mod; + public OPLL_SLOT car; + } + + public class OPLL + { + public UInt32 adr; + public Int32[] output = new Int32[2]; + + /* Register */ + public byte[] reg = new byte[0x40]; + public int[] slot_on_flag = new int[18]; + + /* Rythm Mode : 0 = OFF, 1 = ON */ + public int rythm_mode; + + /* Pitch Modulator */ + public UInt32 pm_phase; + public Int32 lfo_pm; + + /* Amp Modulator */ + public Int32 am_phase; + public Int32 lfo_am; + + /* Noise Generator */ + public UInt32 noise_seed; + public UInt32 whitenoise; + public UInt32 noiseA; + public UInt32 noiseB; + public UInt32 noiseA_phase; + public UInt32 noiseB_phase; + public UInt32 noiseA_idx; + public UInt32 noiseB_idx; + public UInt32 noiseA_dphase; + public UInt32 noiseB_dphase; + + /* Channel & Slot */ + public OPLL_CH[] ch = new OPLL_CH[9]; + public OPLL_SLOT[] slot = new OPLL_SLOT[18]; + + /* Voice Data */ + public OPLL_PATCH[] patch = new OPLL_PATCH[19 * 2]; + public int[] patch_update = new int[2]; /* flag for check patch update */ + + public UInt32 mask; + + public int masterVolume; /* 0min -- 64 -- 127 max (Liner) */ + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs.meta similarity index 83% rename from AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs.meta rename to AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs.meta index 4cfe6b6..23ad2bb 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/TRIANGLE.cs.meta +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/Emu2413/Emu2413_Class.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ed2788da33fe474facc1d7ce1b34d03 +guid: 9c1aaa5374091a64a88e750483fe6f6b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs index 4386337..da7fe18 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs @@ -6,11 +6,11 @@ namespace VirtualNes public static class MMU { // CPU 儊儌儕僶儞僋 - public static ByteArrayRef[] CPU_MEM_BANK = new ByteArrayRef[8]; // 8K扨埵 + public static ArrayRef[] CPU_MEM_BANK = new ArrayRef[8]; // 8K扨埵 public static byte[] CPU_MEM_TYPE = new byte[8]; public static int[] CPU_MEM_PAGE = new int[8]; // 僗僥乕僩僙乕僽梡 // PPU 儊儌儕僶儞僋 - public static ByteArrayRef[] PPU_MEM_BANK = new ByteArrayRef[12]; // 1K扨埵 + public static ArrayRef[] PPU_MEM_BANK = new ArrayRef[12]; // 1K扨埵 public static byte[] PPU_MEM_TYPE = new byte[12]; public static int[] PPU_MEM_PAGE = new int[12]; // 僗僥乕僩僙乕僽梡 public static byte[] CRAM_USED = new byte[16]; // 僗僥乕僩僙乕僽梡 @@ -73,12 +73,12 @@ namespace VirtualNes internal static void SetPROM_Bank(byte page, byte[] ptr, byte type) { - CPU_MEM_BANK[page] = new ByteArrayRef(ptr, 0, ptr.Length); + CPU_MEM_BANK[page] = new ArrayRef(ptr, 0, ptr.Length); CPU_MEM_TYPE[page] = type; CPU_MEM_PAGE[page] = 0; } - internal static void SetPROM_Bank(byte page, ByteArrayRef ptr, byte type) + internal static void SetPROM_Bank(byte page, ArrayRef ptr, byte type) { CPU_MEM_BANK[page] = ptr; CPU_MEM_TYPE[page] = type; @@ -88,7 +88,7 @@ namespace VirtualNes internal static void SetPROM_8K_Bank(byte page, int bank) { bank %= PROM_8K_SIZE; - CPU_MEM_BANK[page] = new ByteArrayRef(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); + CPU_MEM_BANK[page] = new ArrayRef(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); CPU_MEM_TYPE[page] = BANKTYPE_ROM; CPU_MEM_PAGE[page] = bank; } @@ -116,7 +116,7 @@ namespace VirtualNes } // PPU VROM bank - internal static void SetVROM_Bank(byte page, ByteArrayRef ptr, byte type) + internal static void SetVROM_Bank(byte page, ArrayRef ptr, byte type) { PPU_MEM_BANK[page] = ptr; PPU_MEM_TYPE[page] = type; @@ -126,7 +126,7 @@ namespace VirtualNes internal static void SetVROM_1K_Bank(byte page, int bank) { bank %= VROM_1K_SIZE; - PPU_MEM_BANK[page] = new ByteArrayRef(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); + PPU_MEM_BANK[page] = new ArrayRef(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); PPU_MEM_TYPE[page] = BANKTYPE_VROM; PPU_MEM_PAGE[page] = bank; } @@ -169,7 +169,7 @@ namespace VirtualNes internal static void SetCRAM_1K_Bank(byte page, int bank) { bank &= 0x1F; - PPU_MEM_BANK[page] = new ByteArrayRef(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page] = new ArrayRef(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_CRAM; PPU_MEM_PAGE[page] = bank; @@ -201,7 +201,7 @@ namespace VirtualNes internal static void SetVRAM_1K_Bank(byte page, int bank) { bank &= 3; - PPU_MEM_BANK[page] = new ByteArrayRef(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page] = new ArrayRef(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_VRAM; PPU_MEM_PAGE[page] = bank; } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/EEPROM.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/EEPROM.cs index 7f6c4a0..5a8ae76 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/EEPROM.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/EEPROM.cs @@ -19,7 +19,7 @@ namespace VirtualNes.Core byte sda; byte scl_old, sda_old; - ByteArrayRef pEEPDATA; + ArrayRef pEEPDATA; public X24C01() { @@ -34,7 +34,7 @@ namespace VirtualNes.Core pEEPDATA = null; } - public void Reset(ByteArrayRef ptr) + public void Reset(ArrayRef ptr) { now_state = X24C01_IDLE; next_state = X24C01_IDLE; @@ -220,7 +220,7 @@ namespace VirtualNes.Core byte sda; byte scl_old, sda_old; - ByteArrayRef pEEPDATA; + ArrayRef pEEPDATA; public X24C02() { @@ -236,7 +236,7 @@ namespace VirtualNes.Core pEEPDATA = null; } - public void Reset(ByteArrayRef ptr) + public void Reset(ArrayRef ptr) { now_state = X24C02_IDLE; next_state = X24C02_IDLE; diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper001.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper001.cs index 45bef19..fd0324a 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper001.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper001.cs @@ -132,7 +132,7 @@ namespace VirtualNes.Core } } - private ByteArrayRef _PROM_BANK = new ByteArrayRef(); + private ArrayRef _PROM_BANK = new ArrayRef(); //void Mapper001::Write(WORD addr, BYTE data) public override void Write(ushort addr, byte data) { diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper005.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper005.cs index b18017d..b5f15c1 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper005.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper005.cs @@ -39,15 +39,15 @@ namespace VirtualNes.Core //BYTE chr_page[2][8]; BYTE[,] chr_page = new byte[2, 8]; // $5120-$512B // BGパターン用バンク - ByteArrayRef[] BG_MEM_BANK = new ByteArrayRef[8]{ - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), - new ByteArrayRef(), + ArrayRef[] BG_MEM_BANK = new ArrayRef[8]{ + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), + new ArrayRef(), }; BYTE[] BG_MEM_PAGE = new byte[8]; @@ -433,7 +433,7 @@ namespace VirtualNes.Core } } - private ByteArrayRef _prom_bank = new ByteArrayRef(); + private ArrayRef _prom_bank = new ArrayRef(); void SetBank_SRAM(BYTE page, BYTE data) { if (sram_size == 0) data = (byte)((data > 3) ? 8 : 0); diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper016.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper016.cs index 4b9bce8..ecc5fe3 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper016.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper016.cs @@ -139,7 +139,7 @@ namespace VirtualNes.Core { nes.SetSAVERAM_SIZE(384); x24c02.Reset(WRAM); - x24c01.Reset(new ByteArrayRef(WRAM, 256)); + x24c01.Reset(new ArrayRef(WRAM, 256)); } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs index 908a01b..46fa90b 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs @@ -1157,6 +1157,11 @@ namespace VirtualNes.Core bExtMono = bMode; } + internal int GetScanlineNo() + { + return ScanlineNo; + } + public struct Sprite { public byte y diff --git a/AxibugEmuOnline.Client/Assets/Resources/NES/nes20db.xml b/AxibugEmuOnline.Client/nes20db.xml similarity index 100% rename from AxibugEmuOnline.Client/Assets/Resources/NES/nes20db.xml rename to AxibugEmuOnline.Client/nes20db.xml