static int DrvInit() { Mem = (unsigned char*)malloc(0x10000 + 0x10000 + 0x400 + 0x20); if (Mem == NULL) { return 1; } pFMBuffer = (short *)malloc (nBurnSoundLen * 3 * sizeof(short)); if (pFMBuffer == NULL) { return 1; } memset (Mem, 0, 0x20420); Rom = Mem + 0x00000; Gfx = Mem + 0x10000; BankRam = Mem + 0x20000; Palette = (int *)(Mem + 0x20400); { BurnLoadRom(Rom + 0x5000, 0, 1); BurnLoadRom(Rom + 0x6000, 1, 1); BurnLoadRom(Rom + 0x7000, 2, 1); BurnLoadRom(Gfx + 0x0000, 3, 1); BurnLoadRom(Gfx + 0x1000, 4, 1); BurnLoadRom(Gfx + 0x2000, 5, 1); BurnLoadRom(Gfx + 0x3000, 6, 1); BurnLoadRom(Gfx + 0x4000, 7, 1); BurnLoadRom(Gfx + 0x5000, 8, 1); } mole_gfx_convert(); mole_palette_init(); m6502Init(1); m6502Open(0); m6502MapMemory(Rom + 0x0000, 0x0000, 0x03ff, M6502_RAM); // Ram m6502MapMemory(Rom + 0x5000, 0x5000, 0x7fff, M6502_ROM); // Rom m6502MapMemory(Rom + 0x5000, 0xd000, 0xffff, M6502_ROM); // Rom Mirror m6502SetReadHandler(mole_read_byte); m6502SetWriteHandler(mole_write_byte); m6502Close(); pAY8910Buffer[0] = pFMBuffer + nBurnSoundLen * 0; pAY8910Buffer[1] = pFMBuffer + nBurnSoundLen * 1; pAY8910Buffer[2] = pFMBuffer + nBurnSoundLen * 2; AY8910Init(0, 2000000, nBurnSoundRate, NULL, NULL, NULL, NULL); DrvDoReset(); return 0; }
INT32 AY8910InitYM(INT32 chip, INT32 clock, INT32 sample_rate, read8_handler portAread, read8_handler portBread, write8_handler portAwrite, write8_handler portBwrite, void (*update_callback)(void)) { INT32 val = AY8910Init(ay8910_index_ym + chip, clock, sample_rate, portAread, portBread, portAwrite, portBwrite); AYStreamUpdate = update_callback; if (val == 0) { ym_num++; } ay8910_index_ym = num - ym_num; return val; }