void init_dec0_aud(int romNumPrg, int romNumSamples) { Ram = (unsigned char*) malloc(0x0600); Rom = (unsigned char*) malloc(0x8000); memset(Ram,0x00, sizeof(Ram)); MSM6295ROM = (unsigned char*) malloc(0x10000); BurnLoadRom(Rom, romNumPrg,1 ); BurnLoadRom(MSM6295ROM,romNumSamples,1); m6502Init(1); m6502Open(0); m6502MapMemory(Ram, 0x0000, 0x05ff, M6502_RAM); // Ram m6502MapMemory(Rom, 0x8000, 0xffff, M6502_ROM); // Rom m6502SetReadHandler(dec0_aud_read_byte); m6502SetWriteHandler(dec0_aud_write_byte); m6502Close(); BurnYM3812Init(3000000, &dec0YMxxxxIrqHandler, &dec0SynchroniseStream, 1); BurnYM2203Init(1, 1500000, &dec0YMxxxxIrqHandler, dec0SynchroniseStream, DrvGetTime, 0); // Setup the OKIM6295 emulation MSM6295Init(0, 1023924/132, 30.0, 1); BurnTimerAttachSek(10000000); }
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; }
static int DrvInit(int nMcuType) { int nRet = 0, nLen; // Allocate and Blank all required memory Mem = NULL; MemIndex(); nLen = MemEnd - (unsigned char *)0; if ((Mem = (unsigned char *)malloc(nLen)) == NULL) return 1; memset(Mem, 0, nLen); MemIndex(); DrvTempRom = (unsigned char *)malloc(0x60000); // Load M6502 Program Roms nRet = BurnLoadRom(DrvM6502Rom + 0x00000, 0, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvM6502Rom + 0x08000, 1, 1); if (nRet != 0) return 1; // Load M6809 Program Roms nRet = BurnLoadRom(DrvM6809Rom + 0x00000, 2, 1); if (nRet != 0) return 1; // Load and decode the chars nRet = BurnLoadRom(DrvTempRom, 3, 1); if (nRet != 0) return 1; GfxDecode(0x400, 3, 8, 8, CharPlaneOffsets, CharXOffsets, CharYOffsets, 0x100, DrvTempRom, DrvChars); // Load and decode the tiles memset(DrvTempRom, 0, 0x60000); nRet = BurnLoadRom(DrvTempRom + 0x00000, 4, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x08000, 5, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x10000, 6, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x18000, 7, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x20000, 8, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x28000, 9, 1); if (nRet != 0) return 1; GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvTiles + (0x000 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvTiles + (0x100 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvTiles + (0x200 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvTiles + (0x300 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvTiles + (0x400 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvTiles + (0x500 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvTiles + (0x600 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvTiles + (0x700 * 16 * 16)); // Load and decode the sprites memset(DrvTempRom, 0, 0x60000); nRet = BurnLoadRom(DrvTempRom + 0x00000, 10, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x08000, 11, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x10000, 12, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x18000, 13, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x20000, 14, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x28000, 15, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x30000, 16, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x38000, 17, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x40000, 18, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x48000, 19, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x50000, 20, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvTempRom + 0x58000, 21, 1); if (nRet != 0) return 1; GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvSprites + (0x000 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvSprites + (0x100 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvSprites + (0x200 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x00000, DrvSprites + (0x300 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvSprites + (0x400 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvSprites + (0x500 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvSprites + (0x600 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x18000, DrvSprites + (0x700 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x30000, DrvSprites + (0x800 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x30000, DrvSprites + (0x900 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x30000, DrvSprites + (0xa00 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x30000, DrvSprites + (0xb00 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile1PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x48000, DrvSprites + (0xc00 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile2PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x48000, DrvSprites + (0xd00 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile3PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x48000, DrvSprites + (0xe00 * 16 * 16)); GfxDecode(0x100, 3, 16, 16, Tile4PlaneOffsets, TileXOffsets, TileYOffsets, 0x200, DrvTempRom + 0x48000, DrvSprites + (0xf00 * 16 * 16)); // Load ADPCM Roms nRet = BurnLoadRom(DrvADPCMRom + 0x00000, 22, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvADPCMRom + 0x10000, 23, 1); if (nRet != 0) return 1; nRet = BurnLoadRom(DrvADPCMRom + 0x18000, 24, 1); if (nRet != 0) return 1; free(DrvTempRom); // Setup the M6502 emulation m6502Init(1); m6502Open(0); m6502MapMemory(DrvM6502Ram , 0x0000, 0x17ff, M6502_RAM); m6502MapMemory(DrvVideoRam2 , 0x1800, 0x1fff, M6502_RAM); m6502MapMemory(DrvSpriteRam , 0x2000, 0x27ff, M6502_RAM); m6502MapMemory(DrvVideoRam1 , 0x2800, 0x2fff, M6502_RAM); m6502MapMemory(DrvPaletteRam1 , 0x3000, 0x30ff, M6502_RAM); m6502MapMemory(DrvPaletteRam2 , 0x3100, 0x31ff, M6502_RAM); m6502MapMemory(DrvM6502Rom + 0x8000 , 0x4000, 0x7fff, M6502_ROM); m6502MapMemory(DrvM6502Rom , 0x8000, 0xffff, M6502_ROM); m6502SetReadHandler(RenegadeReadByte); m6502SetWriteHandler(RenegadeWriteByte); m6502Close(); // Setup the M6809 emulation M6809Init(1); M6809Open(0); M6809MapMemory(DrvM6809Ram , 0x0000, 0x0fff, M6809_RAM); M6809MapMemory(DrvM6809Rom , 0x8000, 0xffff, M6809_ROM); M6809SetReadByteHandler(RenegadeM6809ReadByte); M6809SetWriteByteHandler(RenegadeM6809WriteByte); M6809Close(); if (nMcuType == MCU_TYPE_RENEGADE) { mcu_type = 0xda; mcu_encrypt_table = renegade_xor_table; mcu_encrypt_table_len = 0x37; } if (nMcuType == MCU_TYPE_KUNIOKUN) { mcu_type = 0x85; mcu_encrypt_table = kuniokun_xor_table; mcu_encrypt_table_len = 0x2a; } BurnYM3526Init(3000000, &DrvFMIRQHandler, &DrvSynchroniseStream, 1); BurnTimerAttachM6809YM3526(1500000); RenegadeADPCMInit(8000); GenericTilesInit(); // Reset the driver DrvDoReset(); return 0; }