static INT32 DrvInit() { INT32 nLen; // bToaRotateScreen = true; BurnSetRefreshRate(REFRESHRATE); nBCU2ROMSize = 0x080000; nFCU2ROMSize = 0x080000; // Find out how much memory is needed AllMem = NULL; MemIndex(); nLen = MemEnd - (UINT8 *)0; if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) { return 1; } memset(AllMem, 0, nLen); MemIndex(); if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x040001, 2, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x040000, 3, 2)) return 1; ToaLoadTiles(BCU2ROM, 4, nBCU2ROMSize); ToaLoadTiles(FCU2ROM, 8, nFCU2ROMSize); { SekInit(0, 0x68000); SekOpen(0); SekMapMemory(Drv68KROM, 0x000000, 0x07FFFF, MAP_ROM); SekMapMemory(Drv68KRAM, 0x0c0000, 0x0c3FFF, MAP_RAM); SekMapMemory(DrvPalRAM, 0x104000, 0x1047FF, MAP_RAM); SekMapMemory(DrvPalRAM2, 0x106000, 0x1067FF, MAP_RAM); SekSetReadWordHandler(0, samesameReadWord); SekSetReadByteHandler(0, samesameReadByte); SekSetWriteWordHandler(0, samesameWriteWord); SekSetWriteByteHandler(0, samesameWriteByte); SekClose(); } ToaInitBCU2(); nToaPalLen = nColCount; ToaPalSrc = DrvPalRAM; ToaPalSrc2 = DrvPalRAM2; ToaPalInit(); // BurnYM3812Init(28000000 / 8, &toaplan1FMIRQHandler, &toaplan1SynchroniseStream, 0); // BurnYM3812SetRoute(BURN_SND_YM3812_ROUTE, 1.00, BURN_SND_ROUTE_BOTH); #ifdef TOAPLAN_SOUND_SAMPLES_HACK BurnUpdateProgress(0.0, _T("Loading samples..."), 0); BurnSampleInit(0); BurnSampleSetAllRoutesAllSamples(0.60, BURN_SND_ROUTE_BOTH); #endif bDrawScreen = true; DrvDoReset(); return 0; }
void BurnSampleInit(INT32 bAdd /*add sample to stream?*/) { DebugSnd_SamplesInitted = 1; if (nBurnSoundRate == 0) { nTotalSamples = 0; return; } INT32 length; char path[256]; char setname[128]; void *destination = NULL; char szTempPath[MAX_PATH]; sprintf(szTempPath, _TtoA(SAMPLE_DIRECTORY)); // test to see if file exists INT32 nEnableSamples = 0; if (BurnDrvGetTextA(DRV_SAMPLENAME) == NULL) { // called with no samples nTotalSamples = 0; return; } strcpy(setname, BurnDrvGetTextA(DRV_SAMPLENAME)); sprintf(path, "%s%s.zip", szTempPath, setname); FILE *test = fopen(path, "rb"); if (test) { nEnableSamples = 1; fclose(test); } #ifdef INCLUDE_7Z_SUPPORT sprintf(path, "%s%s.7z", szTempPath, setname); test = fopen(path, "rb"); if (test) { nEnableSamples = 1; fclose(test); } #endif bAddToStream = bAdd; nTotalSamples = 0; if (!nEnableSamples) return; struct BurnSampleInfo si; INT32 nSampleOffset = -1; do { BurnDrvGetSampleInfo(&si, ++nSampleOffset); if (si.nFlags) nTotalSamples++; } while (si.nFlags); samples = (sample_format*)malloc(sizeof(sample_format) * nTotalSamples); memset (samples, 0, sizeof(sample_format) * nTotalSamples); for (INT32 i = 0; i < nTotalSamples; i++) { BurnDrvGetSampleInfo(&si, i); char *szSampleName = NULL; BurnDrvGetSampleName(&szSampleName, i, 0); sample_ptr = &samples[i]; // append .wav to filename szSampleName[strlen(szSampleName)] = '.'; szSampleName[strlen(szSampleName)] = 'w'; szSampleName[strlen(szSampleName)] = 'a'; szSampleName[strlen(szSampleName)] = 'v'; if (si.nFlags == 0) break; if (si.nFlags & SAMPLE_NOSTORE) { sample_ptr->flags = si.nFlags; sample_ptr->data = NULL; continue; } sprintf (path, "%s%s", szTempPath, setname); destination = NULL; length = 0; ZipLoadOneFile((char*)path, (const char*)szSampleName, &destination, &length); if (length) { sample_ptr->flags = si.nFlags; make_raw((UINT8*)destination, length); } else { sample_ptr->flags = SAMPLE_IGNORE; } sample_ptr->gain[BURN_SND_SAMPLE_ROUTE_1] = 1.00; sample_ptr->gain[BURN_SND_SAMPLE_ROUTE_2] = 1.00; sample_ptr->output_dir[BURN_SND_SAMPLE_ROUTE_1] = BURN_SND_ROUTE_BOTH; sample_ptr->output_dir[BURN_SND_SAMPLE_ROUTE_2] = BURN_SND_ROUTE_BOTH; if (destination) { free (destination); destination = NULL; } BurnSetProgressRange(1.0 / nTotalSamples); BurnUpdateProgress((double)1.0 / i * nTotalSamples, _T("Loading samples..."), 0); } }