static INT32 DrvGfxDecode() { INT32 Plane0[4] = { 0x200000, 0x300000, 0x000000, 0x100000 }; INT32 XOffs0[8] = { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007 }; INT32 YOffs0[8] = { 0x038, 0x030, 0x028, 0x020, 0x018, 0x010, 0x008, 0x000 }; INT32 Plane1[4] = { 0x000004, 0x000000, 0x100004, 0x100000 }; INT32 XOffs1[16] = { 0x10b, 0x10a, 0x109, 0x108, 0x103, 0x102, 0x101, 0x100, 0x00b, 0x00a, 0x009, 0x008, 0x003, 0x002, 0x001, 0x000 }; INT32 YOffs1[16] = { 0x0f0, 0x0e0, 0x0d0, 0x0c0, 0x0b0, 0x0a0, 0x090, 0x080, 0x070, 0x060, 0x050, 0x040, 0x030, 0x020, 0x010, 0x000 }; UINT8 *tmp = (UINT8*)BurnMalloc(0x80000); if (tmp == NULL) { return 1; } for (INT32 i = 0; i < 0x80000; i++) tmp[i] = DrvGfxROM0[i] ^ 0xff; GfxDecode(0x4000, 4, 8, 8, Plane0, XOffs0, YOffs0, 0x040, tmp, DrvGfxROM0); for (INT32 i = 0; i < 0x40000; i++) tmp[i] = DrvGfxROM1[i] ^ 0xff; GfxDecode(0x0800, 4, 16, 16, Plane1, XOffs1, YOffs1, 0x200, tmp, DrvGfxROM1); BurnFree (tmp); return 0; }
static int DrvGfxDecode() { int Plane0[4] = { 0x200000, 0x300000, 0x000000, 0x100000 }; int XOffs0[8] = { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007 }; int YOffs0[8] = { 0x038, 0x030, 0x028, 0x020, 0x018, 0x010, 0x008, 0x000 }; int Plane1[4] = { 0x000004, 0x000000, 0x100004, 0x100000 }; int XOffs1[16] = { 0x10b, 0x10a, 0x109, 0x108, 0x103, 0x102, 0x101, 0x100, 0x00b, 0x00a, 0x009, 0x008, 0x003, 0x002, 0x001, 0x000 }; int YOffs1[16] = { 0x0f0, 0x0e0, 0x0d0, 0x0c0, 0x0b0, 0x0a0, 0x090, 0x080, 0x070, 0x060, 0x050, 0x040, 0x030, 0x020, 0x010, 0x000 }; unsigned char *tmp = (unsigned char*)malloc(0x80000); if (tmp == NULL) { return 1; } for (int i = 0; i < 0x80000; i++) tmp[i] = DrvGfxROM0[i] ^ 0xff; GfxDecode(0x4000, 4, 8, 8, Plane0, XOffs0, YOffs0, 0x040, tmp, DrvGfxROM0); for (int i = 0; i < 0x40000; i++) tmp[i] = DrvGfxROM1[i] ^ 0xff; GfxDecode(0x0800, 4, 16, 16, Plane1, XOffs1, YOffs1, 0x200, tmp, DrvGfxROM1); free (tmp); return 0; }
static int DrvGfxDecode() { int Plane[4] = { 0x000, 0x001, 0x002, 0x003 }; int XOffs[16] = { 0x000, 0x004, 0x008, 0x00c, 0x010, 0x014, 0x018, 0x01c, 0x100, 0x104, 0x108, 0x10c, 0x110, 0x114, 0x118, 0x11c }; int YOffs[16] = { 0x000, 0x020, 0x040, 0x060, 0x080, 0x0a0, 0x0c0, 0x0e0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0 }; unsigned char *tmp = (unsigned char*)malloc(0x10000); if (tmp == NULL) { return 1; } memcpy (tmp, DrvGfxROM0, 0x08000); GfxDecode(0x0400, 4, 8, 8, Plane, XOffs, YOffs, 0x100, tmp, DrvGfxROM0); memcpy (tmp, DrvGfxROM1, 0x10000); GfxDecode(0x0200, 4, 16, 16, Plane, XOffs, YOffs, 0x400, tmp, DrvGfxROM1); if (tmp) { free (tmp); tmp = NULL; } return 0; }
static INT32 DrvGfxDecode() { INT32 Plane0[4] = { 0, 4, RGN_FRAC(0x04000, 1,2), RGN_FRAC(0x04000, 1,2)+4 }; INT32 Plane1[4] = { 0, 4, RGN_FRAC(0x40000, 1,2), RGN_FRAC(0x40000, 1,2)+4 }; INT32 Plane2[4] = { 0, 4, RGN_FRAC(0x40000, 1,2), RGN_FRAC(0x40000, 1,2)+4 }; INT32 XOffs[16] = { STEP4(0,1), STEP4(8,1), STEP4(16,1), STEP4(24,1) }; INT32 YOffs0[8] = { STEP8(0,16) }; INT32 YOffs1[16] = { STEP16(0,32) }; UINT8 *tmp = (UINT8*)BurnMalloc(0x40000); if (tmp == NULL) { return 1; } memcpy (tmp, DrvGfxROM0, 0x04000); GfxDecode(0x0200, 4, 8, 8, Plane0, XOffs, YOffs0, 0x080, tmp, DrvGfxROM0); memcpy (tmp, DrvGfxROM1, 0x40000); GfxDecode(0x0800, 4, 16, 16, Plane1, XOffs, YOffs1, 0x200, tmp, DrvGfxROM1); memcpy (tmp, DrvGfxROM2, 0x40000); GfxDecode(0x0800, 4, 16, 16, Plane2, XOffs, YOffs1, 0x200, tmp, DrvGfxROM2); BurnFree (tmp); return 0; }
static INT32 DrvGfxDecode() { INT32 Plane[8] = { 8*7,8*3,8*5,8*1,8*6,8*2,8*4,8*0 }; INT32 XOffs[8] = { STEP8(0,1) }; INT32 YOffs[8] = { STEP8(0,64) }; GfxDecode(0x8000, 8, 8, 8, Plane, XOffs, YOffs, 8*8*8, DrvGfxROM, DrvGfxROMExp); return 0; }
static int dynablstInit() { int nRet; Mem = NULL; MemIndex(); int nLen = MemEnd - (unsigned char *)0; if ((Mem = (unsigned char *)malloc(nLen)) == NULL) return 1; memset(Mem, 0, nLen); // blank all memory MemIndex(); nRet = BurnLoadRom(RomV30 + 0x000001, 0, 2); if (nRet != 0) return 1; nRet = BurnLoadRom(RomV30 + 0x000000, 1, 2); if (nRet != 0) return 1; memcpy (RomV30+ 0xffff0, RomV30+ 0x3fff0, 0x10 ); /* start vector */ irem_cpu_decrypt(0,bomberman_decryption_table,RomV30,DecrRomV30,0x7ffff ); nRet = BurnLoadRom(RomZ80 + 0x000000, 3, 1); if (nRet != 0) return 1; unsigned char *sprTmp = (unsigned char *) malloc (0x100000); if ( sprTmp == 0 ) { return 1; } for (int i = 0; i < 4; i++) { nRet = BurnLoadRom(sprTmp + (0x40000*i), 3+i, 1); if (nRet != 0) { return 1; } } GfxDecode(0x2000, 4, 16, 16, SpritePlaneOffsets, SpriteXOffsets, SpriteYOffsets, 0x100, sprTmp, RomSpr); GfxDecode(0x8000, 4, 8, 8, TilePlaneOffsets, TileXOffsets, TileYOffsets, 0x40, sprTmp, RomTile); free(sprTmp); { unsigned int cpu_types[] = { 8 }; VezInit(1, &cpu_types[0]); VezOpen(0); VezMapArea(0x00000, 0x7ffff, 0, RomV30 + 0x00000); // CPU 0 ROM VezMapArea(0x00000, 0x7ffff, 2, DecrRomV30,RomV30 + 0x00000 ); VezMapArea(0xa0000, 0xa3fff, 0, RamV30); VezMapArea(0xa0000, 0xa3fff, 1, RamV30); VezMapArea(0xd0000, 0xdffff, 0, RamVideo); //?? VezMapArea(0xd0000, 0xdffff, 1, RamVideo); VezMapArea(0xe0000, 0xe03ff, 0, RamPal); // palette VezMapArea(0xe0000, 0xe03ff, 1, RamPal); // VezMapArea(0xffff0, 0xfffff, 0, RomV30 + 0x3fff0); // start vector VezSetReadHandler(m90ReadByte); VezSetWriteHandler(m90WriteByte); VezSetReadPort(m90ReadPort); VezSetWritePort(m90WritePort); VezClose(); } DrvDoReset(); return 0; }
INT32 TaitoLoadRoms(INT32 bLoad) { struct BurnRomInfo ri; ri.nType = 0; ri.nLen = 0; INT32 nOffset = -1; UINT32 i = 0; INT32 nRet = 0; if (!bLoad) { do { ri.nLen = 0; ri.nType = 0; BurnDrvGetRomInfo(&ri, ++nOffset); if ((ri.nType & 0xff) == TAITO_68KROM1 || (ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP || (ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP_JUMPING || (ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP32) { Taito68KRom1Size += ri.nLen; Taito68KRom1Num++; } if ((ri.nType & 0xff) == TAITO_68KROM2 || (ri.nType & 0xff) == TAITO_68KROM2_BYTESWAP) { Taito68KRom2Size += ri.nLen; Taito68KRom2Num++; } if ((ri.nType & 0xff) == TAITO_68KROM3 || (ri.nType & 0xff) == TAITO_68KROM3_BYTESWAP) { Taito68KRom3Size += ri.nLen; Taito68KRom3Num++; } if ((ri.nType & 0xff) == TAITO_Z80ROM1) { TaitoZ80Rom1Size += ri.nLen; TaitoZ80Rom1Num++; } if ((ri.nType & 0xff) == TAITO_Z80ROM2) { TaitoZ80Rom2Size += ri.nLen; TaitoZ80Rom2Num++; } if ((ri.nType & 0xff) == TAITO_CHARS || (ri.nType & 0xff) == TAITO_CHARS_BYTESWAP) { TaitoCharRomSize += ri.nLen; TaitoCharRomNum++; } if ((ri.nType & 0xff) == TAITO_CHARSB || (ri.nType & 0xff) == TAITO_CHARSB_BYTESWAP) { TaitoCharBRomSize += ri.nLen; TaitoCharBRomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITESA || (ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP || (ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP32 || (ri.nType & 0xff) == TAITO_SPRITESA_TOPSPEED) { TaitoSpriteARomSize += ri.nLen; TaitoSpriteARomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITESB || (ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP || (ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP32) { TaitoSpriteBRomSize += ri.nLen; TaitoSpriteBRomNum++; } if ((ri.nType & 0xff) == TAITO_ROAD) { TaitoRoadRomSize += ri.nLen; TaitoRoadRomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITEMAP) { TaitoSpriteMapRomSize += ri.nLen; TaitoSpriteMapRomNum++; } if ((ri.nType & 0xff) == TAITO_YM2610A) { TaitoYM2610ARomSize += ri.nLen; TaitoYM2610ARomNum++; } if ((ri.nType & 0xff) == TAITO_YM2610B) { TaitoYM2610BRomSize += ri.nLen; TaitoYM2610BRomNum++; } if ((ri.nType & 0xff) == TAITO_MSM5205 || (ri.nType & 0xff) == TAITO_MSM5205_BYTESWAP) { TaitoMSM5205RomSize += ri.nLen; TaitoMSM5205RomNum++; } if ((ri.nType & 0xff) == TAITO_CHARS_PIVOT) { TaitoCharPivotRomSize += ri.nLen; TaitoCharPivotRomNum++; } if ((ri.nType & 0xff) == TAITO_MSM6295) { TaitoMSM6295RomSize += ri.nLen; TaitoMSM6295RomNum++; } if ((ri.nType & 0xff) == TAITO_ES5505 || (ri.nType & 0xff) == TAITO_ES5505_BYTESWAP) { TaitoES5505RomSize += ri.nLen; TaitoES5505RomNum++; } if ((ri.nType & 0xff) == TAITO_DEFAULT_EEPROM) { TaitoDefaultEEPromSize += ri.nLen; TaitoDefaultEEPromNum++; } } while (ri.nLen); #if 1 && defined FBA_DEBUG if (Taito68KRom1Size) bprintf(PRINT_IMPORTANT, _T("68K #1 Rom Length %06X, (%i roms)\n"), Taito68KRom1Size, Taito68KRom1Num); if (Taito68KRom2Size) bprintf(PRINT_IMPORTANT, _T("68K #2 Rom Length %06X, (%i roms)\n"), Taito68KRom2Size, Taito68KRom2Num); if (Taito68KRom3Size) bprintf(PRINT_IMPORTANT, _T("68K #3 Rom Length %06X, (%i roms)\n"), Taito68KRom3Size, Taito68KRom3Num); if (TaitoZ80Rom1Size) bprintf(PRINT_IMPORTANT, _T("Z80 #1 Rom Length %06X, (%i roms)\n"), TaitoZ80Rom1Size, TaitoZ80Rom1Num); if (TaitoZ80Rom2Size) bprintf(PRINT_IMPORTANT, _T("Z80 #2 Rom Length %06X, (%i roms)\n"), TaitoZ80Rom2Size, TaitoZ80Rom2Num); if (TaitoCharRomSize) bprintf(PRINT_IMPORTANT, _T("Char Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharRomSize, TaitoCharRomNum, TaitoNumChar); if (TaitoCharBRomSize) bprintf(PRINT_IMPORTANT, _T("Char B Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharBRomSize, TaitoCharBRomNum, TaitoNumCharB); if (TaitoSpriteARomSize) bprintf(PRINT_IMPORTANT, _T("Sprite A Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoSpriteARomSize, TaitoSpriteARomNum, TaitoNumSpriteA); if (TaitoSpriteBRomSize) bprintf(PRINT_IMPORTANT, _T("Sprite B Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoSpriteBRomSize, TaitoSpriteBRomNum, TaitoNumSpriteB); if (TaitoRoadRomSize) bprintf(PRINT_IMPORTANT, _T("Road Rom Length %08X, (%i roms)\n"), TaitoRoadRomSize, TaitoRoadRomNum); if (TaitoSpriteMapRomSize) bprintf(PRINT_IMPORTANT, _T("Sprite Map Rom Length %08X, (%i roms)\n"), TaitoSpriteMapRomSize, TaitoSpriteMapRomNum); if (TaitoYM2610ARomSize) bprintf(PRINT_IMPORTANT, _T("YM2610 Samples Rom Length %08X, (%i roms)\n"), TaitoYM2610ARomSize, TaitoYM2610ARomNum); if (TaitoYM2610BRomSize) bprintf(PRINT_IMPORTANT, _T("YM2610 Delta-T Rom Length %08X, (%i roms)\n"), TaitoYM2610BRomSize, TaitoYM2610BRomNum); if (TaitoMSM5205RomSize) bprintf(PRINT_IMPORTANT, _T("MSM5205 Rom Length %08X, (%i roms)\n"), TaitoMSM5205RomSize, TaitoMSM5205RomNum); if (TaitoCharPivotRomSize) bprintf(PRINT_IMPORTANT, _T("Pivot Char Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharPivotRomSize, TaitoCharPivotRomNum, TaitoNumCharPivot); if (TaitoMSM6295RomSize) bprintf(PRINT_IMPORTANT, _T("MSM6295 Rom Length %08X, (%i roms)\n"), TaitoMSM6295RomSize, TaitoMSM6295RomNum); if (TaitoES5505RomSize) bprintf(PRINT_IMPORTANT, _T("ES5505 Rom Length %08X, (%i roms)\n"), TaitoES5505RomSize, TaitoES5505RomNum); if (TaitoDefaultEEPromSize) bprintf(PRINT_IMPORTANT, _T("Default EEPROM Length %08X, (%i roms)\n"), TaitoDefaultEEPromSize, TaitoDefaultEEPromNum); #endif } if (bLoad) { INT32 Offset = 0; i = 0; while (i < Taito68KRom1Num) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP) { nRet = BurnLoadRom(Taito68KRom1 + Offset + 1, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom1 + Offset + 0, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP32) { nRet = BurnLoadRom(Taito68KRom1 + Offset + 1, i + 0, 4); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom1 + Offset + 0, i + 1, 4); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom1 + Offset + 3, i + 2, 4); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom1 + Offset + 2, i + 3, 4); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 2); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 3); Offset += ri.nLen; i += 4; } if ((ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP_JUMPING) { nRet = BurnLoadRom(Taito68KRom1 + Offset + 0, i + 0, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_68KROM1) { nRet = BurnLoadRom(Taito68KRom1 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } if (Taito68KRom2Size) { Offset = 0; i = Taito68KRom1Num; while (i < Taito68KRom1Num + Taito68KRom2Num) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_68KROM2_BYTESWAP) { nRet = BurnLoadRom(Taito68KRom2 + Offset + 1, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom2 + Offset + 0, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_68KROM2) { nRet = BurnLoadRom(Taito68KRom2 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } if (Taito68KRom3Size) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_68KROM3_BYTESWAP) { nRet = BurnLoadRom(Taito68KRom3 + Offset + 1, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom3 + Offset + 0, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_68KROM3) { nRet = BurnLoadRom(Taito68KRom3 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } if (TaitoZ80Rom1Size) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num; i++) { BurnLoadRom(TaitoZ80Rom1 + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoZ80Rom2Size) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num; i++) { BurnLoadRom(TaitoZ80Rom2 + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoCharRomSize) { UINT8 *TempRom = (UINT8*)BurnMalloc(TaitoCharRomSize); memset(TempRom, 0, TaitoCharRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARS) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_CHARS_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } if (TaitoNumChar) { GfxDecode(TaitoNumChar, TaitoCharNumPlanes, TaitoCharWidth, TaitoCharHeight, TaitoCharPlaneOffsets, TaitoCharXOffsets, TaitoCharYOffsets, TaitoCharModulo, TempRom, TaitoChars); } else { memcpy (TaitoChars, TempRom, Offset); } BurnFree(TempRom); } if (TaitoCharBRomSize) { UINT8 *TempRom = (UINT8*)BurnMalloc(TaitoCharBRomSize); memset(TempRom, 0, TaitoCharBRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARSB) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_CHARSB_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } GfxDecode(TaitoNumCharB, TaitoCharBNumPlanes, TaitoCharBWidth, TaitoCharBHeight, TaitoCharBPlaneOffsets, TaitoCharBXOffsets, TaitoCharBYOffsets, TaitoCharBModulo, TempRom, TaitoCharsB); BurnFree(TempRom); } if (TaitoSpriteARomSize) { UINT8 *TempRom = (UINT8*)BurnMalloc(TaitoSpriteARomSize); memset(TempRom, 0, TaitoSpriteARomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_SPRITESA) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP32) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 2, i + 2, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 3, i + 3, 4); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 2); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 3); Offset += ri.nLen; i += 4; } if ((ri.nType & 0xff) == TAITO_SPRITESA_TOPSPEED) { nRet = BurnLoadRom(TempRom + 0x000003, i + 0, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100003, i + 1, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000007, i + 2, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100007, i + 3, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000002, i + 4, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100002, i + 5, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000006, i + 6, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100006, i + 7, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000001, i + 8, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100001, i + 9, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000005, i + 10, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100005, i + 11, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000000, i + 12, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100000, i + 13, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x000004, i + 14, 8); if (nRet) return 1; nRet = BurnLoadRom(TempRom + 0x100004, i + 15, 8); if (nRet) return 1; i += 16; } } if (TaitoSpriteAInvertRom) { for (UINT32 j = 0; j < TaitoSpriteARomSize; j++) { TempRom[j] ^= 0xff; } } if (TaitoNumSpriteA) { GfxDecode(TaitoNumSpriteA, TaitoSpriteANumPlanes, TaitoSpriteAWidth, TaitoSpriteAHeight, TaitoSpriteAPlaneOffsets, TaitoSpriteAXOffsets, TaitoSpriteAYOffsets, TaitoSpriteAModulo, TempRom, TaitoSpritesA); } else { memcpy (TaitoSpritesA, TempRom, Offset); } BurnFree(TempRom); } if (TaitoSpriteBRomSize) { UINT8 *TempRom = (UINT8*)BurnMalloc(TaitoSpriteBRomSize); memset(TempRom, 0, TaitoSpriteBRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_SPRITESB) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP32) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 2, i + 2, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 3, i + 3, 4); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 2); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 3); Offset += ri.nLen; i += 4; } } GfxDecode(TaitoNumSpriteB, TaitoSpriteBNumPlanes, TaitoSpriteBWidth, TaitoSpriteBHeight, TaitoSpriteBPlaneOffsets, TaitoSpriteBXOffsets, TaitoSpriteBYOffsets, TaitoSpriteBModulo, TempRom, TaitoSpritesB); BurnFree(TempRom); } if (TaitoRoadRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum; i++) { BurnLoadRom(TC0150RODRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoSpriteMapRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum; i++) { BurnLoadRom(TaitoSpriteMapRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoYM2610ARomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum; i++) { BurnLoadRom(TaitoYM2610ARom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoYM2610BRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum; i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum; i++) { BurnLoadRom(TaitoYM2610BRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoMSM5205RomSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_MSM5205) { nRet = BurnLoadRom(TaitoMSM5205Rom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_MSM5205_BYTESWAP) { nRet = BurnLoadRom(TaitoMSM5205Rom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TaitoMSM5205Rom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } } if (TaitoCharPivotRomSize) { UINT8 *TempRom = (UINT8*)BurnMalloc(TaitoCharPivotRomSize); memset(TempRom, 0, TaitoCharPivotRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARS_PIVOT) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } GfxDecode(TaitoNumCharPivot, TaitoCharPivotNumPlanes, TaitoCharPivotWidth, TaitoCharPivotHeight, TaitoCharPivotPlaneOffsets, TaitoCharPivotXOffsets, TaitoCharPivotYOffsets, TaitoCharPivotModulo, TempRom, TaitoCharsPivot); BurnFree(TempRom); } if (TaitoMSM6295RomSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_MSM6295) { nRet = BurnLoadRom(TaitoMSM6295Rom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } if (TaitoES5505RomSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum + TaitoES5505RomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_ES5505) { nRet = BurnLoadRom(TaitoES5505Rom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_ES5505_BYTESWAP) { nRet = BurnLoadRom(TaitoES5505Rom + (Offset * 2), i, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } if (TaitoDefaultEEPromSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum + TaitoES5505RomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum + TaitoES5505RomNum + TaitoDefaultEEPromNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_DEFAULT_EEPROM) { nRet = BurnLoadRom(TaitoDefaultEEProm + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } } return 0; }
static INT32 GalLoadRoms(bool bLoad) { struct BurnRomInfo ri; ri.nType = 0; ri.nLen = 0; INT32 nOffset = -1; UINT32 i; INT32 nRet = 0; if (!bLoad) { do { ri.nLen = 0; ri.nType = 0; BurnDrvGetRomInfo(&ri, ++nOffset); if ((ri.nType & 0xff) == GAL_ROM_Z80_PROG1) { GalZ80Rom1Size += ri.nLen; GalZ80Rom1Num++; } if ((ri.nType & 0xff) == GAL_ROM_Z80_PROG2) { GalZ80Rom2Size += ri.nLen; GalZ80Rom2Num++; } if ((ri.nType & 0xff) == GAL_ROM_Z80_PROG3) { GalZ80Rom3Size += ri.nLen; GalZ80Rom3Num++; } if ((ri.nType & 0xff) == GAL_ROM_TILES_SHARED) { GalTilesSharedRomSize += ri.nLen; GalTilesSharedRomNum++; } if ((ri.nType & 0xff) == GAL_ROM_TILES_CHARS) { GalTilesCharRomSize += ri.nLen; GalTilesCharRomNum++; } if ((ri.nType & 0xff) == GAL_ROM_TILES_SPRITES) { GalTilesSpriteRomSize += ri.nLen; GalTilesSpriteRomNum++; } if ((ri.nType & 0xff) == GAL_ROM_PROM) { GalPromRomSize += ri.nLen; GalPromRomNum++; } if ((ri.nType & 0xff) == GAL_ROM_S2650_PROG1) { GalS2650Rom1Size += ri.nLen; GalS2650Rom1Num++; } } while (ri.nLen); if (GalTilesSharedRomSize) { GalNumChars = GalTilesSharedRomSize / 16; GalNumSprites = GalTilesSharedRomSize / 64; CharPlaneOffsets[1] = GalTilesSharedRomSize * 4; SpritePlaneOffsets[1] = GalTilesSharedRomSize * 4; } if (GalTilesCharRomSize) { GalNumChars = GalTilesCharRomSize / 16; CharPlaneOffsets[1] = GalTilesCharRomSize * 4; } if (GalTilesSpriteRomSize) { GalNumSprites = GalTilesSpriteRomSize / 64; SpritePlaneOffsets[1] = GalTilesSpriteRomSize * 4; } #if 1 && defined FBA_DEBUG if (GalZ80Rom1Size) bprintf(PRINT_NORMAL, _T("Z80 #1 Rom Size: 0x%X (%i roms)\n"), GalZ80Rom1Size, GalZ80Rom1Num); if (GalZ80Rom2Size) bprintf(PRINT_NORMAL, _T("Z80 #2 Rom Size: 0x%X (%i roms)\n"), GalZ80Rom2Size, GalZ80Rom2Num); if (GalZ80Rom3Size) bprintf(PRINT_NORMAL, _T("Z80 #3 Rom Size: 0x%X (%i roms)\n"), GalZ80Rom3Size, GalZ80Rom3Num); if (GalS2650Rom1Size) bprintf(PRINT_NORMAL, _T("S2650 #1 Rom Size: 0x%X (%i roms)\n"), GalS2650Rom1Size, GalS2650Rom1Num); if (GalTilesSharedRomSize) bprintf(PRINT_NORMAL, _T("Shared Tile Rom Size: 0x%X (%i roms, 0x%X Chars, 0x%X Sprites)\n"), GalTilesSharedRomSize, GalTilesSharedRomNum, GalNumChars, GalNumSprites); if (GalTilesCharRomSize) bprintf(PRINT_NORMAL, _T("Char Rom Size: 0x%X (%i roms, 0x%X Chars)\n"), GalTilesCharRomSize, GalTilesCharRomNum, GalNumChars); if (GalTilesSpriteRomSize) bprintf(PRINT_NORMAL, _T("Sprite Rom Size: 0x%X (%i roms, 0x%X Sprites)\n"), GalTilesSpriteRomSize, GalTilesSpriteRomNum, GalNumSprites); if (GalPromRomSize) bprintf(PRINT_NORMAL, _T("PROM Rom Size: 0x%X (%i roms)\n"), GalPromRomSize, GalPromRomNum); #endif } if (bLoad) { INT32 Offset; // Z80 #1 Program Roms Offset = 0; for (i = 0; i < GalZ80Rom1Num; i++) { nRet = BurnLoadRom(GalZ80Rom1 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } // Z80 #2 Program Roms if (GalZ80Rom2Size) { Offset = 0; for (i = GAL_ROM_OFFSET_Z80_PROG2; i < GAL_ROM_OFFSET_Z80_PROG2 + GalZ80Rom2Num; i++) { nRet = BurnLoadRom(GalZ80Rom2 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } } // Z80 #3 Program Roms if (GalZ80Rom3Size) { Offset = 0; for (i = GAL_ROM_OFFSET_Z80_PROG3; i < GAL_ROM_OFFSET_Z80_PROG3 + GalZ80Rom3Num; i++) { nRet = BurnLoadRom(GalZ80Rom3 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } } // Shared Tile Roms if (GalTilesSharedRomSize) { Offset = 0; GalTempRom = (UINT8*)BurnMalloc(GalTilesSharedRomSize); for (i = GAL_ROM_OFFSET_TILES_SHARED; i < GAL_ROM_OFFSET_TILES_SHARED + GalTilesSharedRomNum; i++) { nRet = BurnLoadRom(GalTempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } GfxDecode(GalNumChars, 2, 8, 8, CharPlaneOffsets, CharXOffsets, CharYOffsets, 0x40, GalTempRom, GalChars); GfxDecode(GalNumSprites, 2, 16, 16, SpritePlaneOffsets, SpriteXOffsets, SpriteYOffsets, 0x100, GalTempRom, GalSprites); BurnFree(GalTempRom); } // Char Tile Roms if (GalTilesCharRomSize) { Offset = 0; GalTempRom = (UINT8*)BurnMalloc(GalTilesCharRomSize); for (i = GAL_ROM_OFFSET_TILES_CHARS; i < GAL_ROM_OFFSET_TILES_CHARS + GalTilesCharRomNum; i++) { nRet = BurnLoadRom(GalTempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } GfxDecode(GalNumChars, 2, 8, 8, CharPlaneOffsets, CharXOffsets, CharYOffsets, 0x40, GalTempRom, GalChars); BurnFree(GalTempRom); } // Sprite Tile Roms if (GalTilesSpriteRomSize) { Offset = 0; GalTempRom = (UINT8*)BurnMalloc(GalTilesSpriteRomSize); for (i = GAL_ROM_OFFSET_TILES_SPRITES; i < GAL_ROM_OFFSET_TILES_SPRITES + GalTilesSpriteRomNum; i++) { nRet = BurnLoadRom(GalTempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } GfxDecode(GalNumSprites, 2, 16, 16, SpritePlaneOffsets, SpriteXOffsets, SpriteYOffsets, 0x100, GalTempRom, GalSprites); BurnFree(GalTempRom); } // Prom if (GalPromRomSize) { Offset = 0; for (i = GAL_ROM_OFFSET_PROM; i < GAL_ROM_OFFSET_PROM + GalPromRomNum; i++) { nRet = BurnLoadRom(GalProm + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } } // S2650 #1 Program Roms if (GalS2650Rom1Size) { Offset = 0; for (i = GAL_ROM_OFFSET_S2650_PROG1; i < GAL_ROM_OFFSET_S2650_PROG1 + GalS2650Rom1Num; i++) { nRet = BurnLoadRom(GalS2650Rom1 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; } } } return nRet; }
int TaitoLoadRoms(int bLoad) { struct BurnRomInfo ri; ri.nType = 0; ri.nLen = 0; int nOffset = -1; unsigned int i = 0; int nRet = 0; if (!bLoad) { do { ri.nLen = 0; ri.nType = 0; BurnDrvGetRomInfo(&ri, ++nOffset); if ((ri.nType & 0xff) == TAITO_68KROM1 || (ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP || (ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP_JUMPING) { Taito68KRom1Size += ri.nLen; Taito68KRom1Num++; } if ((ri.nType & 0xff) == TAITO_68KROM2 || (ri.nType & 0xff) == TAITO_68KROM2_BYTESWAP) { Taito68KRom2Size += ri.nLen; Taito68KRom2Num++; } if ((ri.nType & 0xff) == TAITO_Z80ROM1) { TaitoZ80Rom1Size += ri.nLen; TaitoZ80Rom1Num++; } if ((ri.nType & 0xff) == TAITO_Z80ROM2) { TaitoZ80Rom2Size += ri.nLen; TaitoZ80Rom2Num++; } if ((ri.nType & 0xff) == TAITO_CHARS || (ri.nType & 0xff) == TAITO_CHARS_BYTESWAP) { TaitoCharRomSize += ri.nLen; TaitoCharRomNum++; } if ((ri.nType & 0xff) == TAITO_CHARSB || (ri.nType & 0xff) == TAITO_CHARSB_BYTESWAP) { TaitoCharBRomSize += ri.nLen; TaitoCharBRomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITESA || (ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP || (ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP32) { TaitoSpriteARomSize += ri.nLen; TaitoSpriteARomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITESB || (ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP || (ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP32) { TaitoSpriteBRomSize += ri.nLen; TaitoSpriteBRomNum++; } if ((ri.nType & 0xff) == TAITO_ROAD) { TaitoRoadRomSize += ri.nLen; TaitoRoadRomNum++; } if ((ri.nType & 0xff) == TAITO_SPRITEMAP) { TaitoSpriteMapRomSize += ri.nLen; TaitoSpriteMapRomNum++; } if ((ri.nType & 0xff) == TAITO_YM2610A) { TaitoYM2610ARomSize += ri.nLen; TaitoYM2610ARomNum++; } if ((ri.nType & 0xff) == TAITO_YM2610B) { TaitoYM2610BRomSize += ri.nLen; TaitoYM2610BRomNum++; } if ((ri.nType & 0xff) == TAITO_MSM5205 || (ri.nType & 0xff) == TAITO_MSM5205_BYTESWAP) { TaitoMSM5205RomSize += ri.nLen; TaitoMSM5205RomNum++; } if ((ri.nType & 0xff) == TAITO_CHARS_PIVOT) { TaitoCharPivotRomSize += ri.nLen; TaitoCharPivotRomNum++; } if ((ri.nType & 0xff) == TAITO_MSM6295) { TaitoMSM6295RomSize += ri.nLen; TaitoMSM6295RomNum++; } } while (ri.nLen); #if 1 && defined FBA_DEBUG if (Taito68KRom1Size) bprintf(PRINT_IMPORTANT, _T("68K #1 Rom Length %06X, (%i roms)\n"), Taito68KRom1Size, Taito68KRom1Num); if (Taito68KRom2Size) bprintf(PRINT_IMPORTANT, _T("68K #2 Rom Length %06X, (%i roms)\n"), Taito68KRom2Size, Taito68KRom2Num); if (TaitoZ80Rom1Size) bprintf(PRINT_IMPORTANT, _T("Z80 #1 Rom Length %06X, (%i roms)\n"), TaitoZ80Rom1Size, TaitoZ80Rom1Num); if (TaitoZ80Rom2Size) bprintf(PRINT_IMPORTANT, _T("Z80 #2 Rom Length %06X, (%i roms)\n"), TaitoZ80Rom2Size, TaitoZ80Rom2Num); if (TaitoCharRomSize) bprintf(PRINT_IMPORTANT, _T("Char Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharRomSize, TaitoCharRomNum, TaitoNumChar); if (TaitoCharBRomSize) bprintf(PRINT_IMPORTANT, _T("Char B Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharBRomSize, TaitoCharBRomNum, TaitoNumCharB); if (TaitoSpriteARomSize) bprintf(PRINT_IMPORTANT, _T("Sprite A Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoSpriteARomSize, TaitoSpriteARomNum, TaitoNumSpriteA); if (TaitoSpriteBRomSize) bprintf(PRINT_IMPORTANT, _T("Sprite B Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoSpriteBRomSize, TaitoSpriteBRomNum, TaitoNumSpriteB); if (TaitoRoadRomSize) bprintf(PRINT_IMPORTANT, _T("Road Rom Length %08X, (%i roms)\n"), TaitoRoadRomSize, TaitoRoadRomNum); if (TaitoSpriteMapRomSize) bprintf(PRINT_IMPORTANT, _T("Sprite Map Rom Length %08X, (%i roms)\n"), TaitoSpriteMapRomSize, TaitoSpriteMapRomNum); if (TaitoYM2610ARomSize) bprintf(PRINT_IMPORTANT, _T("YM2610 Samples Rom Length %08X, (%i roms)\n"), TaitoYM2610ARomSize, TaitoYM2610ARomNum); if (TaitoYM2610BRomSize) bprintf(PRINT_IMPORTANT, _T("YM2610 Delta-T Rom Length %08X, (%i roms)\n"), TaitoYM2610BRomSize, TaitoYM2610BRomNum); if (TaitoMSM5205RomSize) bprintf(PRINT_IMPORTANT, _T("MSM5205 Rom Length %08X, (%i roms)\n"), TaitoMSM5205RomSize, TaitoMSM5205RomNum); if (TaitoCharPivotRomSize) bprintf(PRINT_IMPORTANT, _T("Pivot Char Rom Length %08X, (%i roms, 0x%06X tiles)\n"), TaitoCharPivotRomSize, TaitoCharPivotRomNum, TaitoNumCharPivot); if (TaitoMSM6295RomSize) bprintf(PRINT_IMPORTANT, _T("MSM6295 Rom Length %08X, (%i roms)\n"), TaitoMSM6295RomSize, TaitoMSM6295RomNum); #endif } if (bLoad) { int Offset = 0; i = 0; while (i < Taito68KRom1Num) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP) { nRet = BurnLoadRom(Taito68KRom1 + Offset + 1, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom1 + Offset + 0, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_68KROM1_BYTESWAP_JUMPING) { nRet = BurnLoadRom(Taito68KRom1 + Offset + 0, i + 0, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_68KROM1) { nRet = BurnLoadRom(Taito68KRom1 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } if (Taito68KRom2Size) { Offset = 0; i = Taito68KRom1Num; while (i < Taito68KRom1Num + Taito68KRom2Num) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_68KROM2_BYTESWAP) { nRet = BurnLoadRom(Taito68KRom2 + Offset + 1, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(Taito68KRom2 + Offset + 0, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_68KROM2) { nRet = BurnLoadRom(Taito68KRom2 + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } if (TaitoZ80Rom1Size) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num; i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num; i++) { BurnLoadRom(TaitoZ80Rom1 + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoZ80Rom2Size) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num; i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num; i++) { BurnLoadRom(TaitoZ80Rom2 + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoCharRomSize) { unsigned char *TempRom = (unsigned char*)malloc(TaitoCharRomSize); memset(TempRom, 0, TaitoCharRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARS) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_CHARS_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } GfxDecode(TaitoNumChar, TaitoCharNumPlanes, TaitoCharWidth, TaitoCharHeight, TaitoCharPlaneOffsets, TaitoCharXOffsets, TaitoCharYOffsets, TaitoCharModulo, TempRom, TaitoChars); free(TempRom); } if (TaitoCharBRomSize) { unsigned char *TempRom = (unsigned char*)malloc(TaitoCharBRomSize); memset(TempRom, 0, TaitoCharBRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARSB) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_CHARSB_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } GfxDecode(TaitoNumCharB, TaitoCharBNumPlanes, TaitoCharBWidth, TaitoCharBHeight, TaitoCharBPlaneOffsets, TaitoCharBXOffsets, TaitoCharBYOffsets, TaitoCharBModulo, TempRom, TaitoCharsB); free(TempRom); } if (TaitoSpriteARomSize) { unsigned char *TempRom = (unsigned char*)malloc(TaitoSpriteARomSize); memset(TempRom, 0, TaitoSpriteARomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_SPRITESA) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_SPRITESA_BYTESWAP32) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 2, i + 2, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 3, i + 3, 4); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 2); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 3); Offset += ri.nLen; i += 4; } } if (TaitoSpriteAInvertRom) { for (unsigned int j = 0; j < TaitoSpriteARomSize; j++) { TempRom[j] ^= 0xff; } } GfxDecode(TaitoNumSpriteA, TaitoSpriteANumPlanes, TaitoSpriteAWidth, TaitoSpriteAHeight, TaitoSpriteAPlaneOffsets, TaitoSpriteAXOffsets, TaitoSpriteAYOffsets, TaitoSpriteAModulo, TempRom, TaitoSpritesA); free(TempRom); } if (TaitoSpriteBRomSize) { unsigned char *TempRom = (unsigned char*)malloc(TaitoSpriteBRomSize); memset(TempRom, 0, TaitoSpriteBRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_SPRITESB) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } if ((ri.nType & 0xff) == TAITO_SPRITESB_BYTESWAP32) { nRet = BurnLoadRom(TempRom + Offset + 0, i + 0, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 1, i + 1, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 2, i + 2, 4); if (nRet) return 1; nRet = BurnLoadRom(TempRom + Offset + 3, i + 3, 4); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 2); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 3); Offset += ri.nLen; i += 4; } } GfxDecode(TaitoNumSpriteB, TaitoSpriteBNumPlanes, TaitoSpriteBWidth, TaitoSpriteBHeight, TaitoSpriteBPlaneOffsets, TaitoSpriteBXOffsets, TaitoSpriteBYOffsets, TaitoSpriteBModulo, TempRom, TaitoSpritesB); free(TempRom); } if (TaitoRoadRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum; i < Taito68KRom1Num + Taito68KRom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum; i++) { BurnLoadRom(TC0150RODRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoSpriteMapRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum; i < Taito68KRom1Num + Taito68KRom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum; i++) { BurnLoadRom(TaitoSpriteMapRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoYM2610ARomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum; i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum; i++) { BurnLoadRom(TaitoYM2610ARom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoYM2610BRomSize) { Offset = 0; for (i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum; i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum; i++) { BurnLoadRom(TaitoYM2610BRom + Offset, i, 1); BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; } } if (TaitoMSM5205RomSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_MSM5205) { nRet = BurnLoadRom(MSM5205ROM + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } if ((ri.nType & 0xff) == TAITO_MSM5205_BYTESWAP) { nRet = BurnLoadRom(MSM5205ROM + Offset + 0, i + 0, 2); if (nRet) return 1; nRet = BurnLoadRom(MSM5205ROM + Offset + 1, i + 1, 2); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i + 0); Offset += ri.nLen; BurnDrvGetRomInfo(&ri, i + 1); Offset += ri.nLen; i += 2; } } } if (TaitoCharPivotRomSize) { unsigned char *TempRom = (unsigned char*)malloc(TaitoCharPivotRomSize); memset(TempRom, 0, TaitoCharPivotRomSize); Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_CHARS_PIVOT) { nRet = BurnLoadRom(TempRom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } GfxDecode(TaitoNumCharPivot, TaitoCharPivotNumPlanes, TaitoCharPivotWidth, TaitoCharPivotHeight, TaitoCharPivotPlaneOffsets, TaitoCharPivotXOffsets, TaitoCharPivotYOffsets, TaitoCharPivotModulo, TempRom, TaitoCharsPivot); free(TempRom); } if (TaitoMSM6295RomSize) { Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum; while (i < Taito68KRom1Num + Taito68KRom2Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum + TaitoSpriteBRomNum + TaitoRoadRomNum + TaitoSpriteMapRomNum + TaitoYM2610ARomNum + TaitoYM2610BRomNum + TaitoMSM5205RomNum + TaitoCharPivotRomNum + TaitoMSM6295RomNum) { BurnDrvGetRomInfo(&ri, i + 0); if ((ri.nType & 0xff) == TAITO_MSM6295) { nRet = BurnLoadRom(TaitoMSM6295Rom + Offset, i, 1); if (nRet) return 1; BurnDrvGetRomInfo(&ri, i); Offset += ri.nLen; i++; } } } } 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; }