diff --git a/src/burn/drv/konami/d_88games.cpp b/src/burn/drv/konami/d_88games.cpp index 45c6b36f3..735adfff1 100644 --- a/src/burn/drv/konami/d_88games.cpp +++ b/src/burn/drv/konami/d_88games.cpp @@ -360,6 +360,7 @@ static INT32 MemIndex() DrvSndROM0 = Next; Next += 0x020000; DrvSndROM1 = Next; Next += 0x020000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -400,6 +401,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -484,19 +487,17 @@ static INT32 DrvInit() UPD7759SetRoute(0, 0.30, BURN_SND_ROUTE_BOTH); UPD7759SetRoute(1, 0.30, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(0, 0); - K051960Init(DrvGfxROM1, 0xfffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0xfffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(0, 0); K051316Init(0, DrvGfxROM2, DrvGfxROMExp2, 0x3ffff, K051316Callback, 4, 0); K051316SetOffset(0, -104, -16); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -529,24 +530,24 @@ static INT32 DrvDraw() if (k88games_priority) { - K052109RenderLayer(0, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - K052109RenderLayer(1, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 0); - K051316_zoom_draw(0, 4); + if (nBurnLayer & 1) K052109RenderLayer(0, K052109_OPAQUE, 0); + if (nSpriteEnable & 1) K051960SpritesRender(1, 1); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 0); + if (nBurnLayer & 4) K052109RenderLayer(1, 0, 0); + if (nSpriteEnable & 2) K051960SpritesRender(0, 0); + if (nBurnLayer & 8) K051316_zoom_draw(0, 0); } else { - K052109RenderLayer(2, 1, DrvGfxROMExp0); - K051316_zoom_draw(0, 4); - K051960SpritesRender(DrvGfxROMExp1, 0); - K052109RenderLayer(1, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(0, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(2, K052109_OPAQUE, 0); + if (nBurnLayer & 2) K051316_zoom_draw(0, 4); + if (nSpriteEnable & 1) K051960SpritesRender(0, 0); + if (nBurnLayer & 4) K052109RenderLayer(1, 0, 0); + if (nSpriteEnable & 2) K051960SpritesRender(1, 1); + if (nBurnLayer & 8) K052109RenderLayer(0, 0, 0); } - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_ajax.cpp b/src/burn/drv/konami/d_ajax.cpp index 72353b1b1..0bf011401 100644 --- a/src/burn/drv/konami/d_ajax.cpp +++ b/src/burn/drv/konami/d_ajax.cpp @@ -27,7 +27,7 @@ static UINT8 *DrvShareRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -372,10 +372,10 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, static void K051960Callback(INT32 *code, INT32 *color,INT32 *priority, INT32 *) { - *priority = 0; - if ( *color & 0x10) *priority = 1; - if (~*color & 0x40) *priority = 2; - if ( *color & 0x20) *priority = 3; + *priority = 0xff00; + if ( *color & 0x10) *priority |= 0xf0f0; + if (~*color & 0x40) *priority |= 0xcccc; + if ( *color & 0x20) *priority |= 0xaaaa; *color = 16 + (*color & 0x0f); *code &= 0x1fff; } @@ -443,7 +443,8 @@ static INT32 MemIndex() DrvSndROM0 = Next; Next += 0x040000; DrvSndROM1 = Next; Next += 0x080000; - DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; + DrvPalette = (UINT32*)Next; Next += 0x801 * sizeof(UINT32); AllRam = Next; @@ -482,6 +483,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -604,19 +607,17 @@ static INT32 DrvInit() K007232SetRoute(1, BURN_SND_K007232_ROUTE_1, 0.40, BURN_SND_ROUTE_BOTH); K007232SetRoute(1, BURN_SND_K007232_ROUTE_2, 0.30, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0xfffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0xfffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); K051316Init(0, DrvGfxROM2, DrvGfxROM2, 0x7ffff, K051316Callback, 7, 0); K051316SetOffset(0, -112, -16); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -644,34 +645,34 @@ static INT32 DrvDraw() { if (DrvRecalc) { KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x1000); + DrvPalette[0x800] = 0; // black } K052109UpdateScroll(); - BurnTransferClear(); + for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { + konami_temp_screen[i] = DrvPalette[0x800]; + konami_priority_bitmap[i] = 0; + } - if (nBurnLayer & 1) K052109RenderLayer(2, 0, DrvGfxROMExp0); - - if (nSpriteEnable & 1) K051960SpritesRender(DrvGfxROMExp1, 3); - if (nSpriteEnable & 2) K051960SpritesRender(DrvGfxROMExp1, 2); + if (nBurnLayer & 1) K052109RenderLayer(2, 0, 1); if (ajax_priority) { if (nBurnLayer & 2) K051316_zoom_draw(0, 4); - if (nBurnLayer & 4) K052109RenderLayer(1, 0, DrvGfxROMExp0); + if (nBurnLayer & 4) K052109RenderLayer(1, 0, 2); } else { - if (nBurnLayer & 4) K052109RenderLayer(1, 0, DrvGfxROMExp0); + if (nBurnLayer & 4) K052109RenderLayer(1, 0, 2); if (nBurnLayer & 2) K051316_zoom_draw(0, 4); } - if (nSpriteEnable & 4) K051960SpritesRender(DrvGfxROMExp1, 1); - if (nSpriteEnable & 8) K051960SpritesRender(DrvGfxROMExp1, 0); + if (nBurnLayer & 8) K052109RenderLayer(0, 0, 8); - if (nBurnLayer & 8) K052109RenderLayer(0, 0, DrvGfxROMExp0); + if (nSpriteEnable & 8) K051960SpritesRender(-1, -1); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_aliens.cpp b/src/burn/drv/konami/d_aliens.cpp index 915c43dda..89a9c0c75 100644 --- a/src/burn/drv/konami/d_aliens.cpp +++ b/src/burn/drv/konami/d_aliens.cpp @@ -23,7 +23,7 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -273,18 +273,16 @@ static void K051960Callback(INT32 *code, INT32 *color,INT32 *priority, INT32 *sh { switch (*color & 0x70) { - case 0x10: *priority = 0x00; break; - case 0x00: *priority = 0x01; break; - case 0x40: *priority = 0x02; break; - + case 0x10: *priority = 0x00; break; + case 0x00: *priority = 0xf0; break; + case 0x40: *priority = 0xfc; break; case 0x20: - case 0x60: *priority = 0x03; break; - - // when are these used? - case 0x50: *priority = 0x04; break; + case 0x60: *priority = 0xfe; break; + case 0x50: *priority = 0xcc; break; case 0x30: - case 0x70: *priority = 0x05; break; + case 0x70: *priority = 0xee; break; } + *code |= (*color & 0x80) << 6; *code &= 0x3fff; *color = 16 + (*color & 0x0f); @@ -326,6 +324,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x200 * sizeof(UINT32); AllRam = Next; @@ -367,6 +366,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -418,11 +419,11 @@ static INT32 DrvInit() ZetSetReadHandler(aliens_sound_read); ZetClose(); - K052109Init(DrvGfxROM0, 0x1fffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x1fffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0x1fffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x1fffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); @@ -434,8 +435,6 @@ static INT32 DrvInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.20, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -467,21 +466,17 @@ static INT32 DrvDraw() K052109UpdateScroll(); for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 0x0040; + konami_temp_screen[i] = DrvPalette[0x0040]; + konami_priority_bitmap[i] = 0; } - K051960SpritesRender(DrvGfxROMExp1, 3); - K052109RenderLayer(1, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(0, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 0); + if (nBurnLayer & 1) K052109RenderLayer(1, 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 4); - K051960SpritesRender(DrvGfxROMExp1, 4); - K051960SpritesRender(DrvGfxROMExp1, 5); + if (nSpriteEnable & 1) K051960SpritesRender(-1, -1); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_blockhl.cpp b/src/burn/drv/konami/d_blockhl.cpp index 9d7de817a..32b609da0 100644 --- a/src/burn/drv/konami/d_blockhl.cpp +++ b/src/burn/drv/konami/d_blockhl.cpp @@ -21,7 +21,7 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -236,7 +236,7 @@ static void K052109Callback(INT32 layer, INT32, INT32 *code, INT32 *color, INT32 static void K051960Callback(INT32 *code, INT32 *color, INT32 *priority, INT32 *) { - *priority = (*color & 0x10) >> 4; + *priority = ((*color & 0x10) >> 3) | 0xfc; *code &= 0x3ff; *color = 0x30 + (*color & 0x0f); @@ -275,6 +275,7 @@ static INT32 MemIndex() DrvGfxROMExp0 = Next; Next += 0x040000; DrvGfxROMExp1 = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -315,6 +316,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -365,16 +368,14 @@ static INT32 DrvInit() BurnYM2151Init(3579545); BurnYM2151SetAllRoutes(0.60, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x1ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x1ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0x1ffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x1ffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -404,13 +405,13 @@ static INT32 DrvDraw() K052109UpdateScroll(); - K052109RenderLayer(2, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 0); - K052109RenderLayer(1, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(0, 0, DrvGfxROMExp0); + K052109RenderLayer(2, K052109_OPAQUE, 0); + K052109RenderLayer(1, 0, 1); + K052109RenderLayer(0, 0, 2); - BurnTransferCopy(DrvPalette); + K051960SpritesRender(0, -1); + + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_bottom9.cpp b/src/burn/drv/konami/d_bottom9.cpp index 3ba0e5f4f..13ea637ff 100644 --- a/src/burn/drv/konami/d_bottom9.cpp +++ b/src/burn/drv/konami/d_bottom9.cpp @@ -25,7 +25,7 @@ static UINT8 *DrvM6809RAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -459,6 +459,7 @@ static INT32 MemIndex() DrvSndROM0 = Next; Next += 0x040000; DrvSndROM1 = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -498,6 +499,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -583,19 +586,17 @@ static INT32 DrvInit() K007232SetPortWriteHandler(1, DrvK007232VolCallback1); K007232PCMSetAllRoutes(1, 0.40, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0xfffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0xfffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); K051316Init(0, DrvGfxROM2, DrvGfxROMExp2, 0x1ffff, K051316Callback, 4, 0); K051316SetOffset(0, -112, -16); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -625,17 +626,17 @@ static INT32 DrvDraw() K052109UpdateScroll(); - BurnTransferClear(); + memset (konami_temp_screen, 0, nScreenWidth * nScreenHeight * sizeof(INT32)); + memset (konami_priority_bitmap, 0, nScreenWidth * nScreenHeight * sizeof(INT16)); - K051960SpritesRender(DrvGfxROMExp1, 1); + K051960SpritesRender(1, 1); K051316_zoom_draw(0, 0); - K051960SpritesRender(DrvGfxROMExp1, 0); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - K051960SpritesRender(DrvGfxROMExp1, 3); - K052109RenderLayer(1, 0, DrvGfxROMExp0); + K051960SpritesRender(0, 0); + K052109RenderLayer(2, 0, 0); + K051960SpritesRender(2, 3); + K052109RenderLayer(1, 0, 0); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_crimfght.cpp b/src/burn/drv/konami/d_crimfght.cpp index be361289f..8c37eb09b 100644 --- a/src/burn/drv/konami/d_crimfght.cpp +++ b/src/burn/drv/konami/d_crimfght.cpp @@ -23,7 +23,7 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -439,6 +439,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x200 * sizeof(UINT32); AllRam = Next; @@ -480,6 +481,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -536,16 +539,14 @@ static INT32 DrvInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.20, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(-2, 0); - K051960Init(DrvGfxROM1, 0xfffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0xfffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(-2, 0); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -576,14 +577,14 @@ static INT32 DrvDraw() K052109UpdateScroll(); - K052109RenderLayer(1, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(0, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 0); + if (nBurnLayer & 1) K052109RenderLayer(1, K052109_OPAQUE, 0); + if (nSpriteEnable & 1) K051960SpritesRender(2, 2); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 0); + if (nSpriteEnable & 2) K051960SpritesRender(1, 1); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 0); + if (nSpriteEnable & 4) K051960SpritesRender(0, 0); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_gbusters.cpp b/src/burn/drv/konami/d_gbusters.cpp index f1a513d15..675b4a70b 100644 --- a/src/burn/drv/konami/d_gbusters.cpp +++ b/src/burn/drv/konami/d_gbusters.cpp @@ -23,7 +23,7 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -332,6 +332,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -373,6 +374,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -428,16 +431,14 @@ static INT32 DrvInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.30, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0x7ffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x7ffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -471,21 +472,23 @@ static INT32 DrvDraw() if (nDrvRamBank[0] & 0x08) { - if (nBurnLayer & 1) K052109RenderLayer(2, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - if (nBurnLayer & 2) K052109RenderLayer(1, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(2, K052109_OPAQUE, 0); + if (nSpriteEnable & 1) K051960SpritesRender(2, 2); + if (nBurnLayer & 2) K052109RenderLayer(1, 0, 0); + if (nSpriteEnable & 2) K051960SpritesRender(0, 0); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 0); + } else { - if (nBurnLayer & 4) K052109RenderLayer(1, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - if (nBurnLayer & 8) K052109RenderLayer(2, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(1, K052109_OPAQUE, 0); + if (nSpriteEnable & 1) K051960SpritesRender(2, 2); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 0); + if (nSpriteEnable & 2) K051960SpritesRender(0, 0); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 0); } - K051960SpritesRender(DrvGfxROMExp1, 1); - K052109RenderLayer(0, 0, DrvGfxROMExp0); - - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_gradius3.cpp b/src/burn/drv/konami/d_gradius3.cpp index c28c708b6..494a72f7a 100644 --- a/src/burn/drv/konami/d_gradius3.cpp +++ b/src/burn/drv/konami/d_gradius3.cpp @@ -158,6 +158,21 @@ static struct BurnDIPInfo Gradius3DIPList[]= STDDIPINFO(Gradius3) +static void expand_graphics_single(INT32 offset) +{ + offset &= 0x1fffe; + + INT32 t = DrvShareRAM2[offset+0]; + + DrvGfxROMExp0[offset * 2 + 2] = t >> 4; + DrvGfxROMExp0[offset * 2 + 3] = t & 0x0f; + + t = DrvShareRAM2[offset+1]; + + DrvGfxROMExp0[offset * 2 + 0] = t >> 4; + DrvGfxROMExp0[offset * 2 + 1] = t & 0x0f; +} + void __fastcall gradius3_main_write_word(UINT32 address, UINT16 data) { if (address >= 0x14c000 && address <= 0x153fff) { @@ -165,10 +180,22 @@ void __fastcall gradius3_main_write_word(UINT32 address, UINT16 data) K052109Write(address / 2, data); return; } + + if ((address & 0xfe0000) == 0x180000) { + *((UINT16*)(DrvShareRAM2 + (address & 0x1fffe))) = data; + expand_graphics_single(address); + return; + } } void __fastcall gradius3_main_write_byte(UINT32 address, UINT8 data) { + if ((address & 0xfe0000) == 0x180000) { + DrvShareRAM2[(address & 0x1ffff)^1] = data; + expand_graphics_single(address); + return; + } + switch (address) { case 0x0c0000: @@ -184,7 +211,7 @@ void __fastcall gradius3_main_write_byte(UINT32 address, UINT8 data) SekOpen(0); } - gradius3_priority = data & 0x04; + gradius3_priority =(data & 0x04)>>2; gradius3_cpub_enable = data & 0x08; irqA_enable = data & 0x20; } @@ -278,6 +305,12 @@ void __fastcall gradius3_sub_write_word(UINT32 address, UINT16 data) return; } + if ((address & 0xfe0000) == 0x280000) { + *((UINT16*)(DrvShareRAM2 + (address & 0x1fffe))) = data; + expand_graphics_single(address); + return; + } + if ((address & 0xffffff0) == 0x2c0000) { address -= 0x2c0000; K051937Write(address / 2, data); @@ -304,6 +337,12 @@ void __fastcall gradius3_sub_write_byte(UINT32 address, UINT8 data) return; } + if ((address & 0xfe0000) == 0x280000) { + DrvShareRAM2[(address & 0x1ffff)^1] = data; + expand_graphics_single(address); + return; + } + if ((address & 0xffffff0) == 0x2c0000) { address -= 0x2c0000; K051937Write(address / 2, data); @@ -424,7 +463,9 @@ static void K052109Callback(INT32 layer, INT32, INT32 *code, INT32 *color, INT32 static void K051960Callback(INT32 *code, INT32 *color, INT32 *priority, INT32 *) { - *priority = (*color & 0x60) >> 5; + static INT32 primask[2][4] = { { 0xfa, 0xaa, 0xfa, 0xfe }, { 0xfc, 0xf0, 0x00, 0xfe } }; + + *priority = primask[gradius3_priority][((*color & 0x60) >> 5)]; *code |= (*color & 0x01) << 13; *code &= 0x3fff; @@ -475,6 +516,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x080000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -512,6 +554,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -558,7 +602,7 @@ static INT32 DrvInit() SekMapMemory(Drv68KRAM0, 0x040000, 0x043fff, SM_RAM); SekMapMemory(DrvPalRAM, 0x080000, 0x080fff, SM_RAM); SekMapMemory(DrvShareRAM, 0x100000, 0x103fff, SM_RAM); - SekMapMemory(DrvShareRAM2, 0x180000, 0x19ffff, SM_RAM); + SekMapMemory(DrvShareRAM2, 0x180000, 0x19ffff, SM_ROM); SekSetWriteWordHandler(0, gradius3_main_write_word); SekSetWriteByteHandler(0, gradius3_main_write_byte); SekSetReadWordHandler(0, gradius3_main_read_word); @@ -570,7 +614,7 @@ static INT32 DrvInit() SekMapMemory(Drv68KROM1, 0x000000, 0x0fffff, SM_ROM); SekMapMemory(Drv68KRAM1, 0x100000, 0x103fff, SM_RAM); SekMapMemory(DrvShareRAM, 0x200000, 0x203fff, SM_RAM); - SekMapMemory(DrvShareRAM2, 0x280000, 0x29ffff, SM_RAM); + SekMapMemory(DrvShareRAM2, 0x280000, 0x29ffff, SM_ROM); SekMapMemory(DrvGfxROM1, 0x400000, 0x5fffff, SM_ROM); SekSetWriteWordHandler(0, gradius3_sub_write_word); SekSetWriteByteHandler(0, gradius3_sub_write_byte); @@ -597,16 +641,14 @@ static INT32 DrvInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.20, BURN_SND_ROUTE_BOTH); - K052109Init(DrvShareRAM2, 0x1ffff); + K052109Init(DrvShareRAM2, DrvGfxROMExp0, 0x1ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(-8, 0); - K051960Init(DrvGfxROM1, 0x1fffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x1fffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(-8, 0); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -668,40 +710,22 @@ static INT32 DrvDraw() K052109UpdateScroll(); - character_ram_decode(); - if (gradius3_priority == 0) { - if (nSpriteEnable & 1) K052109RenderLayer(1, 1, DrvGfxROMExp0); - - if (nBurnLayer & 4) K051960SpritesRender(DrvGfxROMExp1, 3); - - if (nBurnLayer & 2) K051960SpritesRender(DrvGfxROMExp1, 1); - - if (nBurnLayer & 8) K051960SpritesRender(DrvGfxROMExp1, 0); - - if (nSpriteEnable & 2) K052109RenderLayer(2, 0, DrvGfxROMExp0); - - if (nSpriteEnable & 4) K052109RenderLayer(0, 0, DrvGfxROMExp0); - - if (nBurnLayer & 1) K051960SpritesRender(DrvGfxROMExp1, 2); + if (nSpriteEnable & 1) K052109RenderLayer(1, K052109_OPAQUE, 2); + if (nSpriteEnable & 2) K052109RenderLayer(2, 0, 4); + if (nSpriteEnable & 4) K052109RenderLayer(0, 0, 1); } else { - - if (nSpriteEnable & 1) K052109RenderLayer(0, 1, DrvGfxROMExp0); - if (nSpriteEnable & 2) K052109RenderLayer(1, 0, DrvGfxROMExp0); - if (nSpriteEnable & 4) K052109RenderLayer(2, 0, DrvGfxROMExp0); -#if 1 - if (nBurnLayer & 1) K051960SpritesRender(DrvGfxROMExp1, 2); - if (nBurnLayer & 2) K051960SpritesRender(DrvGfxROMExp1, 1); - if (nBurnLayer & 4) K051960SpritesRender(DrvGfxROMExp1, 3); - if (nBurnLayer & 8) K051960SpritesRender(DrvGfxROMExp1, 0); -#endif + if (nSpriteEnable & 1) K052109RenderLayer(0, K052109_OPAQUE, 1); + if (nSpriteEnable & 2) K052109RenderLayer(1, 0, 2); + if (nSpriteEnable & 4) K052109RenderLayer(2, 0, 4); } + if (nBurnLayer & 8) K051960SpritesRender(-1, -1); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_mainevt.cpp b/src/burn/drv/konami/d_mainevt.cpp index 440ccd28d..471c76ff6 100644 --- a/src/burn/drv/konami/d_mainevt.cpp +++ b/src/burn/drv/konami/d_mainevt.cpp @@ -1,6 +1,8 @@ // FB Alpha The Main Event / Devastators driver module // Based on MAME driver by Bryan McPhail +// Why is The Main Event messed up? Very strange... + #include "tiles_generic.h" #include "z80_intf.h" #include "hd6309_intf.h" @@ -29,8 +31,8 @@ static UINT8 *nmi_enable; static UINT8 *nDrvBank; -static UINT32 *DrvPalette; -static UINT8 DrvRecalc; +static UINT32 *DrvPalette; +static UINT8 DrvRecalc; static UINT8 DrvJoy1[8]; static UINT8 DrvJoy2[8]; @@ -581,12 +583,13 @@ UINT8 __fastcall mainevt_sound_read(UINT16 address) static void K052109Callback(INT32 layer, INT32 , INT32 *code, INT32 *color, INT32 *flipx, INT32 *priority) { + INT32 colorbase[3] = { 0, 8, 4 }; + *flipx = *color & 0x02; - if (layer == 2) *priority = (*color >> 5) & 1; - + *priority = (layer == 2) ? ((*color & 0x20) >> 5) : 0; *code |= ((*color & 0x01) << 8) | ((*color & 0x1c) << 7); - *color = ((layer & 2) << 1) + ((layer & 1) << 2) + ((*color & 0xc0) >> 6); + *color = colorbase[layer] + ((*color & 0xc0) >> 6); } static void DvK052109Callback(INT32 layer, INT32, INT32 *code, INT32 *color, INT32 *, INT32 *) @@ -597,9 +600,9 @@ static void DvK052109Callback(INT32 layer, INT32, INT32 *code, INT32 *color, INT static void K051960Callback(INT32 *, INT32 *color, INT32 *priority, INT32 *) { - if (*color & 0x20) *priority = 0; - else if (*color & 0x40) *priority = 1; - else *priority = 2; + if (*color & 0x20) *priority = 0xff00; + else if (*color & 0x40) *priority = 0xfff0; + else *priority = 0xfffc; *color = 0x0c + (*color & 0x03); } @@ -617,8 +620,6 @@ static void DrvK007232VolCallback(INT32 v) static INT32 DrvDoReset() { - DrvReset = 0; - memset (AllRam, 0, RamEnd - AllRam); HD6309Open(0); @@ -646,13 +647,14 @@ static INT32 MemIndex() DrvZ80ROM = Next; Next += 0x010000; DrvGfxROM0 = Next; Next += 0x040000; - DrvGfxROM1 = Next; Next += 0x100000; DrvGfxROMExp0 = Next; Next += 0x080000; + DrvGfxROM1 = Next; Next += 0x100000; DrvGfxROMExp1 = Next; Next += 0x200000; DrvSndROM0 = Next; Next += 0x080000; DrvSndROM1 = Next; Next += 0x0a0000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x100 * sizeof(UINT32); AllRam = Next; @@ -693,6 +695,8 @@ static INT32 DrvGfxDecode(INT32 gfxlen0) static INT32 DrvInit(INT32 type) { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -746,11 +750,11 @@ static INT32 DrvInit(INT32 type) ZetSetReadHandler(mainevt_sound_read); ZetClose(); - K052109Init(DrvGfxROM0, (gfx0_offset * 2) - 1); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, (gfx0_offset * 2) - 1); K052109SetCallback(nGame ? DvK052109Callback : K052109Callback); K052109AdjustScroll(nGame ? 0 : 8, 0); - K051960Init(DrvGfxROM1, 0xfffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0xfffff); K051960SetCallback(nGame ? DvK051960Callback : K051960Callback); K051960SetSpriteOffset(nGame ? 0 : 8, 0); @@ -764,8 +768,6 @@ static INT32 DrvInit(INT32 type) UPD7759Init(0, UPD7759_STANDARD_CLOCK, DrvSndROM1); UPD7759SetRoute(0, 0.50, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -799,31 +801,26 @@ static INT32 DrvDraw() if (nGame) { - K052109RenderLayer(1, 1, DrvGfxROMExp0); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - - K051960SpritesRender(DrvGfxROMExp1, 0); - - K052109RenderLayer(0, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(1, K052109_OPAQUE, 0); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 0); + if (nSpriteEnable & 1) K051960SpritesRender(0, 0); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 0); } else { - if (nBurnLayer & 1) K052109RenderLayer(1, 1, DrvGfxROMExp0); + memset (konami_temp_screen, 0, nScreenWidth * nScreenHeight * sizeof(INT32)); + memset (konami_priority_bitmap, 0, nScreenWidth * nScreenHeight * sizeof(INT16)); - if (nBurnLayer & 2) K052109RenderLayer(2 | 0x10, 0, DrvGfxROMExp0); - if (nSpriteEnable & 2) K051960SpritesRender(DrvGfxROMExp1, 1); + if (nBurnLayer & 1) K052109RenderLayer(1, K052109_OPAQUE, 1); + if (nBurnLayer & 2) K052109RenderLayer(2, K052109_CATEGORY(1), 2); + if (nBurnLayer & 4) K052109RenderLayer(2, 0, 4); + if (nBurnLayer & 8) K052109RenderLayer(0, 0, 8); - if (nBurnLayer & 4) K052109RenderLayer(2 | 0x00, 0, DrvGfxROMExp0); - - if (nSpriteEnable & 4) K051960SpritesRender(DrvGfxROMExp1, 0); // makes sense... - - if (nSpriteEnable & 1) K051960SpritesRender(DrvGfxROMExp1, 2); - - if (nBurnLayer & 8) K052109RenderLayer(0, 0, DrvGfxROMExp0); + if (nSpriteEnable & 1) K051960SpritesRender(-1, -1); } - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } @@ -989,11 +986,11 @@ static INT32 mainevtInit() } -struct BurnDriver BurnDrvMainevt = { +struct BurnDriverD BurnDrvMainevt = { "mainevt", NULL, NULL, NULL, "1988", "The Main Event (4 Players ver. Y)\0", NULL, "Konami", "GX799", NULL, NULL, NULL, NULL, - BDF_GAME_WORKING, 4, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, + 0, 4, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, NULL, mainevtRomInfo, mainevtRomName, NULL, NULL, MainevtInputInfo, MainevtDIPInfo, mainevtInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x100, 288, 224, 4, 3 @@ -1025,11 +1022,11 @@ static struct BurnRomInfo mainevtoRomDesc[] = { STD_ROM_PICK(mainevto) STD_ROM_FN(mainevto) -struct BurnDriver BurnDrvMainevto = { +struct BurnDriverD BurnDrvMainevto = { "mainevto", "mainevt", NULL, NULL, "1988", "The Main Event (4 Players ver. F)\0", NULL, "Konami", "GX799", NULL, NULL, NULL, NULL, - BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, + BDF_CLONE, 4, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, NULL, mainevtoRomInfo, mainevtoRomName, NULL, NULL, MainevtInputInfo, MainevtDIPInfo, mainevtInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x100, 288, 224, 4, 3 @@ -1061,11 +1058,11 @@ static struct BurnRomInfo mainevt2pRomDesc[] = { STD_ROM_PICK(mainevt2p) STD_ROM_FN(mainevt2p) -struct BurnDriver BurnDrvMainevt2p = { +struct BurnDriverD BurnDrvMainevt2p = { "mainevt2p", "mainevt", NULL, NULL, "1988", "The Main Event (2 Players ver. X)\0", NULL, "Konami", "GX799", NULL, NULL, NULL, NULL, - BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, + BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, NULL, mainevt2pRomInfo, mainevt2pRomName, NULL, NULL, Mainevt2pInputInfo, Mainevt2pDIPInfo, mainevtInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x100, 288, 224, 4, 3 @@ -1097,11 +1094,11 @@ static struct BurnRomInfo ringohjaRomDesc[] = { STD_ROM_PICK(ringohja) STD_ROM_FN(ringohja) -struct BurnDriver BurnDrvRingohja = { +struct BurnDriverD BurnDrvRingohja = { "ringohja", "mainevt", NULL, NULL, "1988", "Ring no Ohja (Japan 2 Players ver. N)\0", NULL, "Konami", "GX799", L"\u30EA\u30F3\u30B0\u306E \u738B\u8005 (Japan 2 Players ver. N)\0Ring no Ohja\0", NULL, NULL, NULL, - BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, + BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SPORTSMISC, 0, NULL, ringohjaRomInfo, ringohjaRomName, NULL, NULL, Mainevt2pInputInfo, Mainevt2pDIPInfo, mainevtInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x100, 288, 224, 4, 3 diff --git a/src/burn/drv/konami/d_parodius.cpp b/src/burn/drv/konami/d_parodius.cpp index 7e62a116d..31f8d860f 100644 --- a/src/burn/drv/konami/d_parodius.cpp +++ b/src/burn/drv/konami/d_parodius.cpp @@ -24,8 +24,7 @@ static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *Palette; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *nDrvRomBank; @@ -314,10 +313,10 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, static void K053245Callback(INT32 *code, INT32 *color, INT32 *priority) { INT32 pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 1; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 2; - else *priority = 3; + if (pri <= layerpri[2]) *priority = 0x00; + else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 0xf0; + else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 0xfc; + else *priority = 0xfe; *code &= 0x1fff; *color = sprite_colorbase + (*color & 0x1f); @@ -367,7 +366,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x080000; - Palette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -404,6 +403,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -450,11 +451,11 @@ static INT32 DrvInit() ZetSetReadHandler(parodius_sound_read); ZetClose(); - K052109Init(DrvGfxROM0, 0xfffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0xfffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvGfxROM1, 0xfffff, K053245Callback); + K053245Init(0, DrvGfxROM1, DrvGfxROMExp1, 0xfffff, K053245Callback); K053245SetSpriteOffset(0, -112, -16); BurnYM2151Init(3579545); @@ -465,8 +466,6 @@ static INT32 DrvInit() K053260SetRoute(0, BURN_SND_K053260_ROUTE_1, 0.70, BURN_SND_ROUTE_LEFT); K053260SetRoute(0, BURN_SND_K053260_ROUTE_2, 0.70, BURN_SND_ROUTE_RIGHT); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -504,30 +503,10 @@ static void sortlayers(INT32 *layer,INT32 *pri) SWAP(1,2) } -static void DrvRecalcPal() -{ - UINT8 r,g,b; - UINT16 *p = (UINT16*)DrvPalRAM; - for (INT32 i = 0; i < 0x1000 / 2; i++) { - UINT16 d = (BURN_ENDIAN_SWAP_INT16(p[i]) << 8) | (BURN_ENDIAN_SWAP_INT16(p[i]) >> 8); - - b = (d >> 10) & 0x1f; - g = (d >> 5) & 0x1f; - r = (d >> 0) & 0x1f; - - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - - DrvPalette[i] = BurnHighCol(r, g, b, 0); - Palette[i] = (r << 16) | (g << 8) | b; - } -} - static INT32 DrvDraw() { if (DrvRecalc) { - DrvRecalcPal(); + KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x1000); } K052109UpdateScroll(); @@ -550,19 +529,17 @@ static INT32 DrvDraw() sortlayers(layer,layerpri); for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * bg_colorbase; + konami_temp_screen[i] = DrvPalette[16 * bg_colorbase]; + konami_priority_bitmap[i] = 0; } - if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, DrvGfxROMExp0); - if (nSpriteEnable & 4) K053245SpritesRender(0, DrvGfxROMExp1, 2); // right? - if (nSpriteEnable & 8) K053245SpritesRender(0, DrvGfxROMExp1, 3); - if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, DrvGfxROMExp0); - if (nSpriteEnable & 2) K053245SpritesRender(0, DrvGfxROMExp1, 1); - if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, 4); - if (nSpriteEnable & 1) K053245SpritesRender(0, DrvGfxROMExp1, 0); // used (back)? + if (nSpriteEnable & 1) K053245SpritesRender(0); - KonamiBlendCopy(Palette, DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_rollerg.cpp b/src/burn/drv/konami/d_rollerg.cpp index 882540377..f5c136fc1 100644 --- a/src/burn/drv/konami/d_rollerg.cpp +++ b/src/burn/drv/konami/d_rollerg.cpp @@ -23,8 +23,7 @@ static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *Palette; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static INT32 readzoomroms; @@ -285,7 +284,7 @@ static void rollerg_set_lines(INT32 lines) static void K053245Callback(INT32 *, INT32 *color, INT32 *priority) { - *priority = *color & 0x10; + *priority = (*color & 0x10) ? 0 : 0x02; *color = 16 + (*color & 0x0f); } @@ -339,7 +338,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x080000; - Palette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -359,6 +358,8 @@ static INT32 MemIndex() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -407,10 +408,10 @@ static INT32 DrvInit() ZetSetReadHandler(rollerg_sound_read); ZetClose(); - K053245Init(0, DrvGfxROM0, 0x1fffff, K053245Callback); + K053245Init(0, DrvGfxROM0, DrvGfxROMExp0, 0x1fffff, K053245Callback); K053245SetSpriteOffset(0, -112, 17); - K051316Init(0, DrvGfxROM1, DrvGfxROMExp1, 0x7ffff, K051316Callback, 4, 0); + K051316Init(0, DrvGfxROM1, DrvGfxROMExp1, 0x07ffff, K051316Callback, 4, 0); K051316SetOffset(0, -90, -15); BurnYM3812Init(3579545, NULL, DrvSynchroniseStream, 0); @@ -420,8 +421,6 @@ static INT32 DrvInit() K053260Init(0, 3579545, DrvSndROM, 0x80000); K053260PCMSetAllRoutes(0, 0.70, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -444,41 +443,21 @@ static INT32 DrvExit() return 0; } -static void DrvRecalcPal() -{ - UINT8 r,g,b; - UINT16 *p = (UINT16*)DrvPalRAM; - for (INT32 i = 0; i < 0x800 / 2; i++) { - UINT16 d = BURN_ENDIAN_SWAP_INT16((p[i] << 8) | (p[i] >> 8)); - - b = (d >> 10) & 0x1f; - g = (d >> 5) & 0x1f; - r = (d >> 0) & 0x1f; - - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - - DrvPalette[i] = BurnHighCol(r, g, b, 0); - Palette[i] = (r << 16) | (g << 8) | b; - } -} - static INT32 DrvDraw() { if (DrvRecalc) { - DrvRecalcPal(); + KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x800); } for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 0x100; + konami_temp_screen[i] = DrvPalette[0x100]; + konami_priority_bitmap[i] = 0; } - K053245SpritesRender(0, DrvGfxROMExp0, 0x00); K051316_zoom_draw(0, 1); - K053245SpritesRender(0, DrvGfxROMExp0, 0x10); + K053245SpritesRender(0); - KonamiBlendCopy(Palette, DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_simpsons.cpp b/src/burn/drv/konami/d_simpsons.cpp index 71dc29749..a3abfbfdf 100644 --- a/src/burn/drv/konami/d_simpsons.cpp +++ b/src/burn/drv/konami/d_simpsons.cpp @@ -25,7 +25,6 @@ static UINT8 *DrvPalRAM; static UINT8 *DrvSprRAM; static UINT8 *DrvZ80RAM; -static UINT32 *Palette; static UINT32 *DrvPalette; static UINT8 DrvRecalc; @@ -330,10 +329,10 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, static void K053247Callback(INT32 *code, INT32 *color, INT32 *priority) { INT32 pri = (*color & 0x0f80) >> 6; - if (pri <= layerpri[2]) *priority = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 1; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 2; - else *priority = 3; + if (pri <= layerpri[2]) *priority = 0x00; + else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 0xf0; + else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 0xfc; + else *priority = 0xfe; *color = sprite_colorbase + (*color & 0x001f); @@ -390,7 +389,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x200000; - Palette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -440,6 +439,8 @@ static const eeprom_interface simpsons_eeprom_intf = static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -495,11 +496,11 @@ static INT32 DrvInit() EEPROMInit(&simpsons_eeprom_intf); - K052109Init(DrvGfxROM0, 0x0fffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x0fffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 0x03 /* shadows & highlights */); + K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x3fffff, K053247Callback, 0x03 /* shadows & highlights */); K053247SetSpriteOffset(-59, 39); BurnYM2151Init(3579545); @@ -510,8 +511,6 @@ static INT32 DrvInit() K053260SetRoute(0, BURN_SND_K053260_ROUTE_1, 0.75, BURN_SND_ROUTE_RIGHT); K053260SetRoute(0, BURN_SND_K053260_ROUTE_2, 0.75, BURN_SND_ROUTE_LEFT); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -561,26 +560,6 @@ static void simpsons_objdma() if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive); } -static void DrvRecalcPal() -{ - UINT8 r,g,b; - UINT16 *p = (UINT16*)DrvPalRAM; - for (INT32 i = 0; i < 0x1000 / 2; i++) { - UINT16 d = BURN_ENDIAN_SWAP_INT16((p[i] << 8) | (p[i] >> 8)); - - b = (d >> 10) & 0x1f; - g = (d >> 5) & 0x1f; - r = (d >> 0) & 0x1f; - - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - - DrvPalette[i] = BurnHighCol(r, g, b, 0); - Palette[i] = (r << 16) | (g << 8) | b; - } -} - static void sortlayers(INT32 *layer,INT32 *pri) { #define SWAP(a,b) \ @@ -599,7 +578,7 @@ static void sortlayers(INT32 *layer,INT32 *pri) static INT32 DrvDraw() { if (DrvRecalc) { - DrvRecalcPal(); + KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x1000); } K052109UpdateScroll(); @@ -621,19 +600,19 @@ static INT32 DrvDraw() sortlayers(layer,layerpri); + memset (konami_priority_bitmap, 0, nScreenWidth * nScreenHeight * 2); + for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * bg_colorbase; + konami_temp_screen[i] = DrvPalette[16 * bg_colorbase]; } - if (nSpriteEnable & 8) K053247SpritesRender(DrvGfxROMExp1, 3); // title (simpsons behind clouds) - if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, DrvGfxROMExp0); // title (back-most cloud) - if (nSpriteEnable & 4) K053247SpritesRender(DrvGfxROMExp1, 2); // smithers' on first stage - if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, DrvGfxROMExp0); // main layer (buildings, stage 1) - if (nSpriteEnable & 2) K053247SpritesRender(DrvGfxROMExp1, 1); // smithers' thugs on stage 1 - if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, DrvGfxROMExp0); // game over text - if (nSpriteEnable & 1) K053247SpritesRender(DrvGfxROMExp1, 0); // not used? seems to make sense here... + if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, 4); - KonamiBlendCopy(Palette, DrvPalette); + if (nSpriteEnable & 1) K053247SpritesRender(); + + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_spy.cpp b/src/burn/drv/konami/d_spy.cpp index 39b3e009a..bffcf10bb 100644 --- a/src/burn/drv/konami/d_spy.cpp +++ b/src/burn/drv/konami/d_spy.cpp @@ -26,7 +26,7 @@ static UINT8 *DrvPMCRAM; static UINT8 *DrvM6809RAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -411,8 +411,8 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, static void K051960Callback(INT32 *code, INT32 *color, INT32 *priority, INT32 *) { *priority = 0x00; - if ( *color & 0x10) *priority = 1; - if (~*color & 0x20) *priority = 2; + if ( *color & 0x10) *priority = 0x0a; + if (~*color & 0x20) *priority = 0x0c; *color = 0x20 | (*color & 0x0f); @@ -481,6 +481,7 @@ static INT32 MemIndex() DrvSndROM0 = Next; Next += 0x040000; DrvSndROM1 = Next; Next += 0x040000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -522,6 +523,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -569,11 +572,11 @@ static INT32 DrvInit() ZetSetReadHandler(spy_sound_read); ZetClose(); - K052109Init(DrvGfxROM0, 0x07ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x07ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(-2, 0); - K051960Init(DrvGfxROM1, 0x0fffff); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x0fffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(0, 0); @@ -589,8 +592,6 @@ static INT32 DrvInit() K007232SetPortWriteHandler(1, DrvK007232VolCallback1); K007232PCMSetAllRoutes(1, 0.20, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -623,19 +624,17 @@ static INT32 DrvDraw() K052109UpdateScroll(); if (spy_video_enable) { - K052109RenderLayer(1, 1, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 2); - K052109RenderLayer(2, 0, DrvGfxROMExp0); - K051960SpritesRender(DrvGfxROMExp1, 1); - K051960SpritesRender(DrvGfxROMExp1, 0); - K052109RenderLayer(0, 0, DrvGfxROMExp0); + K052109RenderLayer(1, K052109_OPAQUE, 1); + K052109RenderLayer(2, 0, 2); + K051960SpritesRender(-1, -1); + K052109RenderLayer(0, 0, 0); } else { for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 0x0300; + konami_temp_screen[i] = DrvPalette[0x0300]; } } - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_surpratk.cpp b/src/burn/drv/konami/d_surpratk.cpp index 7c0be7dc5..0e689c1fc 100644 --- a/src/burn/drv/konami/d_surpratk.cpp +++ b/src/burn/drv/konami/d_surpratk.cpp @@ -19,7 +19,6 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; -static UINT32 *Palette; static UINT32 *DrvPalette; static UINT8 DrvRecalc; @@ -143,8 +142,8 @@ static struct BurnDIPInfo SuratkjDIPList[]= static struct BurnDIPInfo BonusQuizDIPList[]= { {0 , 0xfe, 0 , 2, "Bonus Quiz" }, - {0x15, 0x01, 0x80, 0x80, "Include" }, - {0x15, 0x01, 0x80, 0x00, "Except" }, + {0x15, 0x01, 0x80, 0x80, "Include" }, + {0x15, 0x01, 0x80, 0x00, "Except" }, }; STDDIPINFO(Suratkj) @@ -253,10 +252,10 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, static void K053245Callback(INT32 *code, INT32 *color, INT32 *priority) { INT32 pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 1; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 2; - else *priority = 3; + if (pri <= layerpri[2]) *priority = 0x00; + else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 0xf0; + else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 0xfc; + else *priority = 0xfe; *code &= 0xfff; *color = sprite_colorbase + (*color & 0x1f); @@ -303,7 +302,7 @@ static INT32 MemIndex() DrvKonROM = Next; Next += 0x050000; - Palette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -338,6 +337,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); int nLen = MemEnd - (UINT8 *)0; @@ -369,11 +370,11 @@ static INT32 DrvInit() konamiSetlinesCallback(supratk_set_lines); konamiClose(); - K052109Init(DrvGfxROM0, 0x7ffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x7ffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvGfxROM1, 0x7ffff, K053245Callback); + K053245Init(0, DrvGfxROM1, DrvGfxROMExp1, 0x7ffff, K053245Callback); K053245SetSpriteOffset(0, -112, 16); BurnYM2151Init(3579545); @@ -381,8 +382,6 @@ static INT32 DrvInit() BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -404,26 +403,6 @@ static INT32 DrvExit() return 0; } -static void DrvRecalcPal() -{ - UINT8 r,g,b; - UINT16 *p = (UINT16*)DrvPalRAM; - for (INT32 i = 0; i < 0x1000 / 2; i++) { - UINT16 d = BURN_ENDIAN_SWAP_INT16((p[i] << 8) | (p[i] >> 8)); - - b = (d >> 10) & 0x1f; - g = (d >> 5) & 0x1f; - r = (d >> 0) & 0x1f; - - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - - DrvPalette[i] = BurnHighCol(r, g, b, 0); - Palette[i] = (r << 16) | (g << 8) | b; - } -} - // stolen directly from mame static void sortlayers(INT32 *layer,INT32 *pri) { @@ -443,7 +422,7 @@ static void sortlayers(INT32 *layer,INT32 *pri) static INT32 DrvDraw() { if (DrvRecalc) { - DrvRecalcPal(); + KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x1000); } K052109UpdateScroll(); @@ -466,19 +445,17 @@ static INT32 DrvDraw() sortlayers(layer,layerpri); for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * bg_colorbase; + konami_temp_screen[i] = DrvPalette[16 * bg_colorbase]; + konami_priority_bitmap[i] = 0; } - if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, DrvGfxROMExp0); - if (nSpriteEnable & 4) K053245SpritesRender(0, DrvGfxROMExp1, 2); // right? - if (nSpriteEnable & 8) K053245SpritesRender(0, DrvGfxROMExp1, 3); - if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, DrvGfxROMExp0); - if (nSpriteEnable & 2) K053245SpritesRender(0, DrvGfxROMExp1, 1); - if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, 4); - if (nSpriteEnable & 1) K053245SpritesRender(0, DrvGfxROMExp1, 0); // used? + if (nSpriteEnable & 1) K053245SpritesRender(0); - KonamiBlendCopy(Palette, DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } @@ -497,7 +474,7 @@ static INT32 DrvFrame() DrvInputs[2] ^= (DrvJoy3[i] & 1) << i; } - // Clear Opposites + // Clear Opposites if ((DrvInputs[0] & 0x18) == 0) DrvInputs[0] |= 0x18; if ((DrvInputs[0] & 0x06) == 0) DrvInputs[0] |= 0x06; if ((DrvInputs[1] & 0x18) == 0) DrvInputs[1] |= 0x18; diff --git a/src/burn/drv/konami/d_thunderx.cpp b/src/burn/drv/konami/d_thunderx.cpp index 87b0dad29..50ba8e795 100644 --- a/src/burn/drv/konami/d_thunderx.cpp +++ b/src/burn/drv/konami/d_thunderx.cpp @@ -23,7 +23,7 @@ static UINT8 *DrvBankRAM; static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static UINT8 *soundlatch; @@ -31,6 +31,7 @@ static UINT8 *nDrvKonamiBank; static UINT8 *pmcram; static UINT8 thunderx_1f98_data; +static UINT8 layer_priority; static UINT8 DrvJoy1[8]; static UINT8 DrvJoy2[8]; @@ -322,6 +323,7 @@ static void thunderx_1f98_w(UINT8 data) static void scontra_bankswitch(INT32 data) { nDrvKonamiBank[0] = data; + layer_priority = data & 0x80; if (~data & 0x10) { konamiMapMemory(DrvPalRAM, 0x5800, 0x5fff, KON_RAM); @@ -337,6 +339,7 @@ static void scontra_bankswitch(INT32 data) static void thunderx_videobank(INT32 data) { nDrvKonamiBank[0] = data; + layer_priority = data & 0x08; if (data & 0x01) { konamiMapMemory(DrvBankRAM, 0x5800, 0x5fff, KON_RAM); @@ -482,11 +485,17 @@ static void K052109Callback(INT32 layer, INT32 bank, INT32 *code, INT32 *color, *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); } -static void K051960Callback(INT32 *, INT32 *color,INT32 *priority, INT32 *shadow) +static void K051960Callback(INT32 *, INT32 *color,INT32 *priority, INT32 *) { - *priority = (*color & 0x30) >> 4; + switch (*color & 0x30) + { + case 0x00: *priority = 0xf0; break; + case 0x10: *priority = 0xfe; break; + case 0x20: *priority = 0xfc; break; + case 0x30: *priority = 0xffff; break; + } + *color = 0x20 + (*color & 0x0f); - *shadow = 0; } static void thunderx_set_lines(INT32 lines) @@ -517,6 +526,8 @@ static INT32 DrvDoReset() KonamiICReset(); + layer_priority = 0; + return 0; } @@ -534,6 +545,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x080000; + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x400 * sizeof(UINT32); AllRam = Next; @@ -576,6 +588,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -689,16 +703,14 @@ static INT32 DrvInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.20, BURN_SND_ROUTE_BOTH); - K052109Init(DrvGfxROM0, 0x0fffff >> thunderx); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x0fffff >> thunderx); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K051960Init(DrvGfxROM1, 0x0fffff >> thunderx); + K051960Init(DrvGfxROM1, DrvGfxROMExp1, 0x0fffff >> thunderx); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -731,28 +743,22 @@ static INT32 DrvDraw() K052109UpdateScroll(); -// K051960SpritesRender(DrvGfxROMExp1, 3); - - if (nDrvKonamiBank[0] & 0x08) + if (layer_priority) { - if (nBurnLayer & 1) K052109RenderLayer(2, 1, DrvGfxROMExp0); - if (nBurnLayer & 2) K052109RenderLayer(1, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(2, K052109_OPAQUE, 1); + if (nBurnLayer & 2) K052109RenderLayer(1, 0, 2); } else { - if (nBurnLayer & 8) K052109RenderLayer(2, 1, DrvGfxROMExp0); - if (nBurnLayer & 4) K052109RenderLayer(1, 0, DrvGfxROMExp0); + if (nBurnLayer & 1) K052109RenderLayer(1, K052109_OPAQUE, 1); + if (nBurnLayer & 2) K052109RenderLayer(2, 0, 2); } - K051960SpritesRender(DrvGfxROMExp1, 2); + if (nBurnLayer & 4) K052109RenderLayer(0, 0, 4); - K051960SpritesRender(DrvGfxROMExp1, 1); - - K051960SpritesRender(DrvGfxROMExp1, 0); // mask? - - K052109RenderLayer(0, 0, DrvGfxROMExp0); + if (nSpriteEnable & 1) K051960SpritesRender(-1, -1); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } @@ -856,6 +862,8 @@ static INT32 DrvScan(INT32 nAction,INT32 *pnMin) if (nAction & ACB_DRIVER_DATA) { SCAN_VAR(thunderx_1f98_data); + + SCAN_VAR(layer_priority); } if (nAction & ACB_WRITE) { diff --git a/src/burn/drv/konami/d_tmnt.cpp b/src/burn/drv/konami/d_tmnt.cpp index edb08c57b..5bcaf97a7 100644 --- a/src/burn/drv/konami/d_tmnt.cpp +++ b/src/burn/drv/konami/d_tmnt.cpp @@ -36,7 +36,6 @@ static UINT8 *DrvNvRam = NULL; static UINT8 *DrvTiles = NULL; static UINT8 *DrvSprites = NULL; static UINT8 *DrvTempRom = NULL; -static UINT32 *Palette; static UINT32 *DrvPalette = NULL; static INT16 *DrvTitleSample = NULL; @@ -2035,7 +2034,7 @@ static INT32 TmntMemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); DrvTitleSample = (INT16*)Next; Next += 0x40000 * sizeof(INT16); DrvTiles = Next; Next += 0x008000 * 8 * 8; @@ -2064,7 +2063,7 @@ static INT32 MiaMemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); DrvTiles = Next; Next += 0x002000 * 8 * 8; DrvSprites = Next; Next += 0x002000 * 16 * 16; @@ -2089,7 +2088,7 @@ static INT32 CuebrickMemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00400 * sizeof(UINT32); DrvTiles = Next; Next += 0x002000 * 8 * 8; DrvSprites = Next; Next += 0x001000 * 16 * 16; @@ -2121,7 +2120,7 @@ static INT32 BlswhstlMemIndex() DrvTiles = Next; Next += 0x008000 * 8 * 8; DrvSprites = Next; Next += 0x002000 * 16 * 16; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); MemEnd = Next; @@ -2148,7 +2147,7 @@ static INT32 SsridersMemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); DrvTiles = Next; Next += 0x008000 * 8 * 8; DrvSprites = Next; Next += 0x004000 * 16 * 16; @@ -2177,7 +2176,7 @@ static INT32 Tmnt2MemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); DrvTiles = Next; Next += 0x008000 * 8 * 8; DrvSprites = Next; Next += 0x008000 * 16 * 16; @@ -2205,7 +2204,7 @@ static INT32 Thndrx2MemIndex() DrvTileRom = Next; Next += 0x100000; DrvSpriteRom = Next; Next += 0x100000; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); DrvTiles = Next; Next += 0x008000 * 8 * 8; DrvSprites = Next; Next += 0x002000 * 16 * 16; @@ -2234,7 +2233,7 @@ static INT32 LgtnfghtMemIndex() DrvTileRom = Next; Next += 0x100000; DrvSpriteRom = Next; Next += 0x100000; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); DrvTiles = Next; Next += 0x008000 * 8 * 8; DrvSprites = Next; Next += 0x002000 * 16 * 16; @@ -2262,7 +2261,7 @@ static INT32 PunkshotMemIndex() RamEnd = Next; - Palette = (UINT32*)Next; Next += 0x00800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x00810 * sizeof(UINT32); DrvTiles = Next; Next += 0x004000 * 8 * 8; DrvSprites = Next; Next += 0x004000 * 16 * 16; @@ -4286,6 +4285,7 @@ static void K052109CuebrickCallback(INT32 Layer, INT32, INT32 *Code, INT32 *Colo } } + static void K052109BlswhstlCallback(INT32 Layer, INT32 Bank, INT32 *Code, INT32 *Colour, INT32 *, INT32 *) { *Code |= ((*Colour & 0x01) << 8) | ((*Colour & 0x10) << 5) | ((*Colour & 0x0c) << 8) | (Bank << 12) | (BlswhstlTileRomBank << 14); @@ -4312,10 +4312,10 @@ static void K051960CuebrickCallback(INT32* Code, INT32 *Colour, INT32*, INT32*) static void K051960Thndrx2Callback(INT32* code, INT32 *color, INT32* priority, INT32*) { INT32 pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= LayerPri[2]) *priority = 0; - else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 1; - else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 2; - else *priority = 3; + if (pri <= LayerPri[2]) *priority = 0x00; + else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 0xf0; + else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 0xfc; + else *priority = 0xfe; *code &= 0x1fff; *color = SpriteColourBase + (*color & 0x0f); @@ -4324,10 +4324,10 @@ static void K051960Thndrx2Callback(INT32* code, INT32 *color, INT32* priority, I static void K051960PunkshotCallback(INT32 *code, INT32 *color, INT32 *priority, INT32 *) { INT32 pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= LayerPri[2]) *priority = 0; - else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 1; - else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 2; - else *priority = 3; + if (pri <= LayerPri[2]) *priority = 0x00; + else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 0xf0; + else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 0xfc; + else *priority = 0xfe; *code |= (*color & 0x10) << 9; *code &= 0x3fff; @@ -4337,10 +4337,10 @@ static void K051960PunkshotCallback(INT32 *code, INT32 *color, INT32 *priority, static void K053245BlswhstlCallback(INT32 *Code, INT32 *Colour, INT32 *Priority) { INT32 Pri = 0x20 | ((*Colour & 0x60) >> 2); - if (Pri <= LayerPri[2]) *Priority = 0; - else if (Pri > LayerPri[2] && Pri <= LayerPri[1]) *Priority = 1; - else if (Pri > LayerPri[1] && Pri <= LayerPri[0]) *Priority = 2; - else *Priority = 3; + if (Pri <= LayerPri[2]) *Priority = 0x00; + else if (Pri > LayerPri[2] && Pri <= LayerPri[1]) *Priority = 0xf0; + else if (Pri > LayerPri[1] && Pri <= LayerPri[0]) *Priority = 0xfc; + else *Priority = 0xfe; *Code &= 0x1fff; *Colour = SpriteColourBase + (*Colour & 0x1f); @@ -4349,10 +4349,10 @@ static void K053245BlswhstlCallback(INT32 *Code, INT32 *Colour, INT32 *Priority) static void K053245SsridersCallback(INT32 *, INT32 *Colour, INT32 *Priority) { INT32 Pri = 0x20 | ((*Colour & 0x60) >> 2); - if (Pri <= LayerPri[2]) *Priority = 0; - else if (Pri > LayerPri[2] && Pri <= LayerPri[1]) *Priority = 1; - else if (Pri > LayerPri[1] && Pri <= LayerPri[0]) *Priority = 2; - else *Priority = 3; + if (Pri <= LayerPri[2]) *Priority = 0x00; + else if (Pri > LayerPri[2] && Pri <= LayerPri[1]) *Priority = 0xf0; + else if (Pri > LayerPri[1] && Pri <= LayerPri[0]) *Priority = 0xfc; + else *Priority = 0xfe; *Colour = SpriteColourBase + (*Colour & 0x1f); } @@ -4360,10 +4360,10 @@ static void K053245SsridersCallback(INT32 *, INT32 *Colour, INT32 *Priority) static void K053245LgtnfghtCallback(INT32 *code, INT32 *color, INT32 *priority) { INT32 pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= LayerPri[2]) *priority = 0; - else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 1; - else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 2; - else *priority = 3; + if (pri <= LayerPri[2]) *priority = 0x00; + else if (pri > LayerPri[2] && pri <= LayerPri[1]) *priority = 0xf0; + else if (pri > LayerPri[1] && pri <= LayerPri[0]) *priority = 0xfc; + else *priority = 0xfe; *color = SpriteColourBase + (*color & 0x1f); *code &= 0x3fff; @@ -4382,6 +4382,8 @@ static void CuebrickYM2151IrqHandler(INT32 Irq) static INT32 TmntInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4392,9 +4394,9 @@ static INT32 TmntInit() memset(Mem, 0, nLen); TmntMemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); - K051960Init(DrvSpriteRom, 0x1fffff); + K051960Init(DrvSpriteRom, DrvSprites, 0x1fffff); K051960SetCallback(K051960TmntCallback); // Load 68000 Program Roms @@ -4476,8 +4478,6 @@ static INT32 TmntInit() TmntTitleSampleSetRoute(1.00, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - LayerColourBase[0] = 0; LayerColourBase[1] = 32; LayerColourBase[2] = 40; @@ -4491,6 +4491,8 @@ static INT32 TmntInit() static INT32 MiaInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4501,9 +4503,9 @@ static INT32 MiaInit() memset(Mem, 0, nLen); MiaMemIndex(); - K052109Init(DrvTileRom, 0x03ffff); + K052109Init(DrvTileRom, DrvTiles, 0x03ffff); K052109SetCallback(K052109MiaCallback); - K051960Init(DrvSpriteRom, 0x0fffff); + K051960Init(DrvSpriteRom, DrvSprites, 0x0fffff); K051960SetCallback(K051960MiaCallback); // Load 68000 Program Roms @@ -4571,8 +4573,6 @@ static INT32 MiaInit() K007232SetPortWriteHandler(0, DrvK007232VolCallback); K007232PCMSetAllRoutes(0, 0.20, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - LayerColourBase[0] = 0; LayerColourBase[1] = 32; LayerColourBase[2] = 40; @@ -4586,6 +4586,8 @@ static INT32 MiaInit() static INT32 CuebrickInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4596,10 +4598,10 @@ static INT32 CuebrickInit() memset(Mem, 0, nLen); CuebrickMemIndex(); - K052109Init(DrvTileRom, 0x03ffff); + K052109Init(DrvTileRom, DrvTiles, 0x03ffff); K052109SetCallback(K052109CuebrickCallback); - K051960Init(DrvSpriteRom, 0x03ffff); + K051960Init(DrvSpriteRom, DrvSprites, 0x03ffff); K051960SetCallback(K051960CuebrickCallback); // Load 68000 Program Roms @@ -4638,9 +4640,7 @@ static INT32 CuebrickInit() BurnYM2151Init(3579545); BurnYM2151SetIrqHandler(&CuebrickYM2151IrqHandler); BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); - - GenericTilesInit(); - + LayerColourBase[0] = 0; LayerColourBase[1] = 32; LayerColourBase[2] = 40; @@ -4654,6 +4654,8 @@ static INT32 CuebrickInit() static INT32 BlswhstlInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4664,11 +4666,11 @@ static INT32 BlswhstlInit() memset(Mem, 0, nLen); BlswhstlMemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109BlswhstlCallback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvSpriteRom, 0xfffff, K053245BlswhstlCallback); + K053245Init(0, DrvSpriteRom, DrvSprites, 0xfffff, K053245BlswhstlCallback); K053245SetSpriteOffset(0, -112, 16); // Load 68000 Program Roms @@ -4732,8 +4734,6 @@ static INT32 BlswhstlInit() EEPROMInit(&BlswhstlEEPROMInterface); - GenericTilesInit(); - // Reset the driver BlswhstlDoReset(); @@ -4742,6 +4742,8 @@ static INT32 BlswhstlInit() static INT32 SsridersInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4752,11 +4754,11 @@ static INT32 SsridersInit() memset(Mem, 0, nLen); SsridersMemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvSpriteRom, 0x1fffff, K053245LgtnfghtCallback); + K053245Init(0, DrvSpriteRom, DrvSprites, 0x1fffff, K053245LgtnfghtCallback); K053245SetSpriteOffset(0, -368, 528); K05324xSetZRejection(0); @@ -4819,8 +4821,6 @@ static INT32 SsridersInit() EEPROMInit(&BlswhstlEEPROMInterface); - GenericTilesInit(); - // Reset the driver SsridersDoReset(); @@ -4829,6 +4829,8 @@ static INT32 SsridersInit() static INT32 Thndrx2Init() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4839,11 +4841,11 @@ static INT32 Thndrx2Init() memset(Mem, 0, nLen); Thndrx2MemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(8, 0); - K051960Init(DrvSpriteRom, 0x0fffff); + K051960Init(DrvSpriteRom, DrvSprites, 0x0fffff); K051960SetCallback(K051960Thndrx2Callback); K051960SetSpriteOffset(8, 0); @@ -4903,8 +4905,6 @@ static INT32 Thndrx2Init() EEPROMInit(&thndrx2_eeprom_interface); - GenericTilesInit(); - // Reset the driver SsridersDoReset(); @@ -4913,6 +4913,8 @@ static INT32 Thndrx2Init() static INT32 LgtnfghtInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -4923,11 +4925,11 @@ static INT32 LgtnfghtInit() memset(Mem, 0, nLen); LgtnfghtMemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvSpriteRom, 0x0fffff, K053245LgtnfghtCallback); + K053245Init(0, DrvSpriteRom, DrvSprites, 0x0fffff, K053245LgtnfghtCallback); K053245SetSpriteOffset(0, -368, 528); K05324xSetZRejection(0); @@ -4988,8 +4990,6 @@ static INT32 LgtnfghtInit() EEPROMInit(&thndrx2_eeprom_interface); - GenericTilesInit(); - // Reset the driver SsridersDoReset(); @@ -4998,6 +4998,8 @@ static INT32 LgtnfghtInit() static INT32 Tmnt2Init() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -5008,11 +5010,11 @@ static INT32 Tmnt2Init() memset(Mem, 0, nLen); Tmnt2MemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(8, 0); - K053245Init(0, DrvSpriteRom, 0x3fffff, K053245SsridersCallback); + K053245Init(0, DrvSpriteRom, DrvSprites, 0x3fffff, K053245SsridersCallback); K053245SetSpriteOffset(0, -368, 272); K05324xSetZRejection(0); @@ -5081,8 +5083,6 @@ static INT32 Tmnt2Init() EEPROMInit(&BlswhstlEEPROMInterface); - GenericTilesInit(); - // Reset the driver SsridersDoReset(); @@ -5091,6 +5091,8 @@ static INT32 Tmnt2Init() static INT32 QgakumonInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -5101,11 +5103,11 @@ static INT32 QgakumonInit() memset(Mem, 0, nLen); Tmnt2MemIndex(); - K052109Init(DrvTileRom, 0x0fffff); + K052109Init(DrvTileRom, DrvTiles, 0x0fffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(0, 0); - K053245Init(0, DrvSpriteRom, 0x3fffff, K053245SsridersCallback); + K053245Init(0, DrvSpriteRom, DrvSprites, 0x3fffff, K053245SsridersCallback); K053245SetSpriteOffset(0, -360, 272); K05324xSetZRejection(0); @@ -5172,8 +5174,6 @@ static INT32 QgakumonInit() EEPROMInit(&BlswhstlEEPROMInterface); - GenericTilesInit(); - // Reset the driver SsridersDoReset(); @@ -5182,6 +5182,8 @@ static INT32 QgakumonInit() static INT32 PunkshotInit() { + GenericTilesInit(); + INT32 nRet = 0, nLen; // Allocate and Blank all required memory @@ -5192,11 +5194,11 @@ static INT32 PunkshotInit() memset(Mem, 0, nLen); PunkshotMemIndex(); - K052109Init(DrvTileRom, 0x07ffff); + K052109Init(DrvTileRom, DrvTiles, 0x07ffff); K052109SetCallback(K052109TmntCallback); K052109AdjustScroll(8, 0); - K051960Init(DrvSpriteRom, 0x1fffff); + K051960Init(DrvSpriteRom, DrvSprites, 0x1fffff); K051960SetCallback(K051960PunkshotCallback); K051960SetSpriteOffset(8, 0); @@ -5252,8 +5254,6 @@ static INT32 PunkshotInit() K053260Init(0, 3579545, DrvSoundRom, 0x80000); K053260PCMSetAllRoutes(0, 0.70, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - srand ( time(NULL) ); // Reset the driver @@ -5344,8 +5344,7 @@ static void DrvCalcPalette() INT32 Offset = i & ~1; UINT32 Data = (BURN_ENDIAN_SWAP_INT16(PaletteRam[Offset]) << 8) | BURN_ENDIAN_SWAP_INT16(PaletteRam[Offset + 1]); - Palette[Offset >> 1] = (pal5bit(Data >> 0) << 16) | (pal5bit(Data >> 5) << 8) | pal5bit(Data >> 10); - DrvPalette[Offset >> 1] = BurnHighCol(pal5bit(Data >> 0), pal5bit(Data >> 5), pal5bit(Data >> 10), 0); + DrvPalette[Offset >> 1] = (pal5bit(Data >> 0) << 16) | (pal5bit(Data >> 5) << 8) | pal5bit(Data >> 10); } } @@ -5356,25 +5355,10 @@ static void BlswhstlCalcPalette() for (INT32 i = 0; i < 0x800; i++) { UINT32 Data = BURN_ENDIAN_SWAP_INT16(PaletteRam[i]); - Palette[i] = (pal5bit(Data >> 0) << 16) | (pal5bit(Data >> 5) << 8) | pal5bit(Data >> 10); - DrvPalette[i] = BurnHighCol(pal5bit(Data >> 0), pal5bit(Data >> 5), pal5bit(Data >> 10), 0); + DrvPalette[i] = (pal5bit(Data >> 0) << 16) | (pal5bit(Data >> 5) << 8) | pal5bit(Data >> 10); } } -static void TmntDraw() -{ - DrvCalcPalette(); - K052109UpdateScroll(); - - K052109RenderLayer(2, 1, DrvTiles); - if ((PriorityFlag & 1) == 1) K051960SpritesRender(DrvSprites, -1); - K052109RenderLayer(1, 0, DrvTiles); - if ((PriorityFlag & 1) == 0) K051960SpritesRender(DrvSprites, -1); - K052109RenderLayer(0, 0, DrvTiles); - - BurnTransferCopy(DrvPalette); -} - static void sortlayers(INT32 *layer,INT32 *pri) { #define SWAP(a,b) \ @@ -5405,7 +5389,7 @@ static inline void BlswhstlCalcPaletteWithContrast(INT32 i, INT32 brt) g = (g * brt) / 100; b = (b * brt) / 100; - DrvPalette[i] = BurnHighCol(r, g, b, 0); + DrvPalette[i] = (r<<16) | (g<<8) | b; } static void PaletteDim(INT32 dimslayer) @@ -5435,6 +5419,20 @@ static void PaletteDim(INT32 dimslayer) } } +static void TmntDraw() +{ + DrvCalcPalette(); + K052109UpdateScroll(); + + K052109RenderLayer(2, K052109_OPAQUE, 0); + if ((PriorityFlag & 1) == 1) K051960SpritesRender(0, 0); + K052109RenderLayer(1, 0, 0); + if ((PriorityFlag & 1) == 0) K051960SpritesRender(0, 0); + K052109RenderLayer(0, 0, 0); + + KonamiBlendCopy(DrvPalette); +} + static void BlswhstlDraw() { INT32 Layer[3]; @@ -5455,22 +5453,21 @@ static void BlswhstlDraw() Layer[2] = 2; for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * BGColourBase; + konami_temp_screen[i] = DrvPalette[16 * BGColourBase]; + konami_priority_bitmap[i] = 0; } sortlayers(Layer, LayerPri); PaletteDim(Layer[2]); - K053245SpritesRender(0, DrvSprites, 3); - if (nBurnLayer & 1) K052109RenderLayer(Layer[0], 0, DrvTiles); - K053245SpritesRender(0, DrvSprites, 2); - if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, DrvTiles); - K053245SpritesRender(0, DrvSprites, 1); - K053245SpritesRender(0, DrvSprites, 0); - if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, DrvTiles); + if (nBurnLayer & 1) K052109RenderLayer(Layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, 4); - KonamiBlendCopy(Palette, DrvPalette); + if (nSpriteEnable & 1) K053245SpritesRender(0); + + KonamiBlendCopy(DrvPalette); } static INT32 Thndrx2Draw() @@ -5494,20 +5491,19 @@ static INT32 Thndrx2Draw() Layer[2] = 2; for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * BGColourBase; + konami_temp_screen[i] = DrvPalette[16 * BGColourBase]; + konami_priority_bitmap[i] = 0; } sortlayers(Layer, LayerPri); - if (nSpriteEnable & 8) K051960SpritesRender(DrvSprites, 3); - if (nBurnLayer & 1) K052109RenderLayer(Layer[0], 0, DrvTiles); - if (nSpriteEnable & 4) K051960SpritesRender(DrvSprites, 2); - if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, DrvTiles); - if (nSpriteEnable & 2) K051960SpritesRender(DrvSprites, 1); - if (nSpriteEnable & 1) K051960SpritesRender(DrvSprites, 0); - if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, DrvTiles); + if (nBurnLayer & 1) K052109RenderLayer(Layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, 4); - BurnTransferCopy(DrvPalette); + if (nSpriteEnable & 1) K051960SpritesRender(-1, -1); + + KonamiBlendCopy(DrvPalette); return 0; } @@ -5534,15 +5530,13 @@ static INT32 PunkshotDraw() sortlayers(Layer, LayerPri); -// if (nSpriteEnable & 8) K051960SpritesRender(DrvSprites, 3); // not sure... - if (nBurnLayer & 1) K052109RenderLayer(Layer[0], 1, DrvTiles); - if (nSpriteEnable & 4) K051960SpritesRender(DrvSprites, 2); - if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, DrvTiles); - if (nSpriteEnable & 2) K051960SpritesRender(DrvSprites, 1); - if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, DrvTiles); - if (nSpriteEnable & 1) K051960SpritesRender(DrvSprites, 0); + if (nBurnLayer & 1) K052109RenderLayer(Layer[0], K052109_OPAQUE, 1); + if (nBurnLayer & 2) K052109RenderLayer(Layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(Layer[2], 0, 4); - BurnTransferCopy(DrvPalette); + if (nSpriteEnable & 1) K051960SpritesRender(-1, -1); + + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_ultraman.cpp b/src/burn/drv/konami/d_ultraman.cpp index 7a64ca7be..5e7b2472a 100644 --- a/src/burn/drv/konami/d_ultraman.cpp +++ b/src/burn/drv/konami/d_ultraman.cpp @@ -28,7 +28,7 @@ static UINT8 *soundlatch; static UINT8 *RamEnd; static UINT8 *MemEnd; -static UINT32 *DrvPalette; +static UINT32 *DrvPalette; static UINT8 DrvRecalc; static INT32 bank0; @@ -369,6 +369,7 @@ static INT32 MemIndex() MSM6295ROM = Next; DrvSndROM = Next; Next += 0x040000; + konami_palette32= (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x2000 * sizeof(UINT32); AllRam = Next; @@ -411,6 +412,8 @@ static INT32 DrvGfxDecode() static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -467,7 +470,7 @@ static INT32 DrvInit() ZetSetReadHandler(ultraman_sound_read); ZetClose(); - K051960Init(DrvGfxROM0, 0xfffff); + K051960Init(DrvGfxROM0, DrvGfxROMExp0, 0xfffff); K051960SetCallback(K051960Callback); K051960SetSpriteOffset(9, 0); @@ -487,8 +490,6 @@ static INT32 DrvInit() MSM6295Init(0, 1056000 / 132, 1); MSM6295SetRoute(0, 0.50, BURN_SND_ROUTE_BOTH); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -524,7 +525,7 @@ static inline void DrvRecalcPalette() g = (g << 3) | (g >> 2); b = (b << 3) | (b >> 2); - DrvPalette[i] = BurnHighCol(r, g, b, 0); + DrvPalette[i] = (r << 16) + (g << 8) + b; } } @@ -534,15 +535,16 @@ static INT32 DrvDraw() DrvRecalcPalette(); } - BurnTransferClear(); + memset (konami_priority_bitmap, 0, nScreenWidth * nScreenHeight * sizeof(INT16)); + memset (konami_temp_screen, 0, nScreenWidth * nScreenHeight * sizeof(INT32)); K051316_zoom_draw(2, 0); K051316_zoom_draw(1, 0); - K051960SpritesRender(DrvGfxROMExp0, 0); + K051960SpritesRender(0, 0); K051316_zoom_draw(0, 0); - K051960SpritesRender(DrvGfxROMExp0, 1); + K051960SpritesRender(1, 1); - BurnTransferCopy(DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_vendetta.cpp b/src/burn/drv/konami/d_vendetta.cpp index 337df5358..8af8523d1 100644 --- a/src/burn/drv/konami/d_vendetta.cpp +++ b/src/burn/drv/konami/d_vendetta.cpp @@ -24,7 +24,6 @@ static UINT8 *DrvKonRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *Palette; static UINT32 *DrvPalette; static UINT8 DrvRecalc; @@ -520,9 +519,9 @@ static void K053247Callback(INT32 *code, INT32 *color, INT32 *priority) { INT32 pri = (*color & 0x03e0) >> 4; if (pri <= layerpri[2]) *priority = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 1; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 2; - else *priority = 3; + else if (pri > layerpri[2] && pri <= layerpri[1]) *priority = 0xf0; + else if (pri > layerpri[1] && pri <= layerpri[0]) *priority = 0xf0 | 0xcc; + else *priority = 0xf0 | 0xcc | 0xaa; *code &= 0x7fff; @@ -579,7 +578,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x100000; - Palette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -628,6 +627,8 @@ static const eeprom_interface vendetta_eeprom_intf = static INT32 DrvInit(INT32 nGame) { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -667,11 +668,11 @@ static INT32 DrvInit(INT32 nGame) konamiSetlinesCallback(vendetta_set_lines); konamiClose(); - K052109Init(DrvGfxROM0, 0x0fffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x0fffff); K052109SetCallback(EsckidsK052109Callback); K052109AdjustScroll(8, -8); - K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 1); + K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x3fffff, K053247Callback, 1); K053247SetSpriteOffset(-11, 14); bankoffset = 0x6000; @@ -688,11 +689,11 @@ static INT32 DrvInit(INT32 nGame) konamiSetlinesCallback(vendetta_set_lines); konamiClose(); - K052109Init(DrvGfxROM0, 0x0fffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x0fffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(0, 0); - K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 1); + K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x3fffff, K053247Callback, 1); K053247SetSpriteOffset(-53, 22); bankoffset = 0; @@ -719,8 +720,6 @@ static INT32 DrvInit(INT32 nGame) K053260SetRoute(0, BURN_SND_K053260_ROUTE_1, 0.75, BURN_SND_ROUTE_LEFT); K053260SetRoute(0, BURN_SND_K053260_ROUTE_2, 0.75, BURN_SND_ROUTE_RIGHT); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -745,26 +744,6 @@ static INT32 DrvExit() return 0; } -static void DrvRecalcPal() -{ - UINT8 r,g,b; - UINT16 *p = (UINT16*)DrvPalRAM; - for (INT32 i = 0; i < 0x1000 / 2; i++) { - UINT16 d = BURN_ENDIAN_SWAP_INT16((p[i] << 8) | (p[i] >> 8)); - - b = (d >> 10) & 0x1f; - g = (d >> 5) & 0x1f; - r = (d >> 0) & 0x1f; - - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - - Palette[i] = (r << 16) | (g << 8) | b; - DrvPalette[i] = BurnHighCol(r, g, b, 0); - } -} - static void sortlayers(INT32 *layer,INT32 *pri) { #define SWAP(a,b) \ @@ -783,7 +762,7 @@ static void sortlayers(INT32 *layer,INT32 *pri) static INT32 DrvDraw() { if (DrvRecalc) { - DrvRecalcPal(); + KonamiRecalcPal(DrvPalRAM, DrvPalette, 0x1000); } K052109UpdateScroll(); @@ -805,23 +784,13 @@ static INT32 DrvDraw() sortlayers(layer,layerpri); - BurnTransferClear(); + if (nBurnLayer & 1) K052109RenderLayer(layer[0], K052109_OPAQUE, 1); + if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, 4); - // this order makes sense... - if (nSpriteEnable & 8) K053247SpritesRender(DrvGfxROMExp1, 0); + if (nSpriteEnable & 1) K053247SpritesRender(); - if (nBurnLayer & 1) K052109RenderLayer(layer[0], 1, DrvGfxROMExp0); - - if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, DrvGfxROMExp0); - - if (nSpriteEnable & 4) K053247SpritesRender(DrvGfxROMExp1, 1); - if (nSpriteEnable & 2) K053247SpritesRender(DrvGfxROMExp1, 2); - - if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, DrvGfxROMExp0); - - if (nSpriteEnable & 1) K053247SpritesRender(DrvGfxROMExp1, 3); - - KonamiBlendCopy(Palette, DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } diff --git a/src/burn/drv/konami/d_xmen.cpp b/src/burn/drv/konami/d_xmen.cpp index c1e2b935b..c390af0d6 100644 --- a/src/burn/drv/konami/d_xmen.cpp +++ b/src/burn/drv/konami/d_xmen.cpp @@ -24,7 +24,6 @@ static UINT8 *Drv68KRAM; static UINT8 *DrvPalRAM; static UINT8 *DrvZ80RAM; -static UINT32 *Palette; static UINT32 *DrvPalette; static UINT8 DrvRecalc; @@ -305,12 +304,12 @@ static void K052109Callback(INT32 layer, INT32 , INT32 *, INT32 *color, INT32 *, static void K053247Callback(INT32 *code, INT32 *color, INT32 *priority_mask) { INT32 pri = (*color & 0x00e0) >> 4; - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 1; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 2; - else *priority_mask = 3; + if (pri <= layerpri[2]) *priority_mask = 0x00; + else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; + else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xfc; + else *priority_mask = 0xfe; - *color = sprite_colorbase + (*color & 0x001f); + *color = (sprite_colorbase + (*color & 0x001f)) & 0x7f; *code &= 0x7fff; } @@ -360,7 +359,7 @@ static INT32 MemIndex() DrvSndROM = Next; Next += 0x200000; - Palette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); + konami_palette32 = (UINT32*)Next; DrvPalette = (UINT32*)Next; Next += 0x800 * sizeof(UINT32); AllRam = Next; @@ -413,6 +412,8 @@ static const eeprom_interface xmen_eeprom_intf = static INT32 DrvInit() { + GenericTilesInit(); + AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; @@ -468,11 +469,11 @@ static INT32 DrvInit() EEPROMInit(&xmen_eeprom_intf); - K052109Init(DrvGfxROM0, 0x1fffff); + K052109Init(DrvGfxROM0, DrvGfxROMExp0, 0x1fffff); K052109SetCallback(K052109Callback); K052109AdjustScroll(8, 0); - K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 1); + K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x3fffff, K053247Callback, 1); K053247SetSpriteOffset(-510, 158); BurnYM2151Init(4000000); @@ -483,8 +484,6 @@ static INT32 DrvInit() K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); - GenericTilesInit(); - DrvDoReset(); return 0; @@ -509,21 +508,7 @@ static INT32 DrvExit() return 0; } -static void sortlayers(INT32 *layer,INT32 *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - INT32 t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - +// not standard konami layout static inline void DrvRecalcPalette() { UINT8 r,g,b; @@ -539,11 +524,25 @@ static inline void DrvRecalcPalette() g = (g << 3) | (g >> 2); b = (b << 3) | (b >> 2); - Palette[i] = (r << 16) | (g << 8) | b; - DrvPalette[i] = BurnHighCol(r, g, b, 0); + DrvPalette[i] = (r << 16) | (g << 8) | b; } } +static void sortlayers(INT32 *layer,INT32 *pri) +{ +#define SWAP(a,b) \ + if (pri[a] < pri[b]) \ + { \ + INT32 t; \ + t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ + t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ + } + + SWAP(0,1) + SWAP(0,2) + SWAP(1,2) +} + static INT32 DrvDraw() { if (DrvRecalc) { @@ -570,24 +569,17 @@ static INT32 DrvDraw() sortlayers(layer,layerpri); for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { - pTransDraw[i] = 16 * bg_colorbase+1; + konami_temp_screen[i] = DrvPalette[16 * bg_colorbase+1]; + konami_priority_bitmap[i] = 0; } - if (nSpriteEnable & 8) K053247SpritesRender(DrvGfxROMExp1, 3); + if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, 1); + if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, 2); + if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, 4); - if (nBurnLayer & 1) K052109RenderLayer(layer[0], 0, DrvGfxROMExp0); + if (nSpriteEnable & 1) K053247SpritesRender(); - if (nBurnLayer & 2) K052109RenderLayer(layer[1], 0, DrvGfxROMExp0); - -if (nBurnLayer & 8) { - if (nSpriteEnable & 1) K053247SpritesRender(DrvGfxROMExp1, 0); - if (nSpriteEnable & 2) K053247SpritesRender(DrvGfxROMExp1, 1); - if (nSpriteEnable & 4) K053247SpritesRender(DrvGfxROMExp1, 2); -} - - if (nBurnLayer & 4) K052109RenderLayer(layer[2], 0, DrvGfxROMExp0); - - KonamiBlendCopy(Palette, DrvPalette); + KonamiBlendCopy(DrvPalette); return 0; } @@ -606,7 +598,7 @@ static INT32 DrvFrame() DrvInputs[2] ^= (DrvJoy3[i] & 1) << i; } - // Clear Opposites + // Clear Opposites if ((DrvInputs[1] & 0x0c) == 0) DrvInputs[1] |= 0x0c; if ((DrvInputs[1] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[0] & 0x0c) == 0) DrvInputs[0] |= 0x0c; diff --git a/src/burn/drv/konami/k051316.cpp b/src/burn/drv/konami/k051316.cpp index 46e5e2df4..1223a0735 100644 --- a/src/burn/drv/konami/k051316.cpp +++ b/src/burn/drv/konami/k051316.cpp @@ -41,6 +41,8 @@ void K051316Init(INT32 chip, UINT8 *gfx, UINT8 *gfxexp, INT32 mask, void (*callb K051316GfxExpand(gfx, gfxexp, mask+1); } + konami_allocate_bitmaps(); + KonamiIC_K051316InUse = 1; K051316Offs[chip][0] = K051316Offs[chip][1] = 0; @@ -157,10 +159,12 @@ void K051316WrapEnable(INT32 chip, INT32 status) K051316Wrap[chip] = status; } -static inline void copy_roz(INT32 chip, UINT32 startx, UINT32 starty, INT32 incxx, INT32 incxy, INT32 incyx, INT32 incyy, INT32 wrap, INT32 transp) +static inline void copy_roz(INT32 chip, UINT32 startx, UINT32 starty, INT32 incxx, INT32 incxy, INT32 incyx, INT32 incyy, INT32 wrap, INT32 transp, INT32 flags) { - UINT16 *dst = pTransDraw; + UINT32 *dst = konami_temp_screen; + UINT16 *pri = konami_priority_bitmap; UINT16 *src = K051316TileMap[chip]; + UINT32 *pal = konami_palette32; UINT32 hshift = 512 << 16; UINT32 wshift = 512 << 16; @@ -172,45 +176,49 @@ static inline void copy_roz(INT32 chip, UINT32 startx, UINT32 starty, INT32 incx if (wrap) { if (transp) { - for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++) + for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++, pri++) { INT32 pxl = src[(((cy >> 16) & 0x1ff) << 9) | ((cx >> 16) & 0x1ff)]; if (!(pxl & 0x8000)) { - *dst = pxl; + *dst = pal[pxl]; + *pri = flags; } } } else { - for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++) { - *dst = src[(((cy >> 16) & 0x1ff) << 9) | ((cx >> 16) & 0x1ff)] & 0x7fff; + for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++, pri++) { + *dst = pal[src[(((cy >> 16) & 0x1ff) << 9) | ((cx >> 16) & 0x1ff)] & 0x7fff]; + *pri = flags; } } } else { if (transp) { - for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++) + for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++, pri++) { if (cx < wshift && cy < hshift) { INT32 pxl = src[(((cy >> 16) & 0x1ff) << 9) | ((cx >> 16) & 0x1ff)]; if (!(pxl & 0x8000)) { - *dst = pxl; + *dst = pal[pxl]; + *pri = flags; } } } } else { - for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++) + for (INT32 x = 0; x < nScreenWidth; x++, cx+=incxx, cy+=incxy, dst++, pri++) { UINT32 pos = ((cy >> 16) << 9) | (cx >> 16); if (pos >= 0x40000) continue; - *dst = src[pos] & 0x7fff; + *dst = pal[src[pos] & 0x7fff]; + *pri = flags; } } } } } -void K051316_zoom_draw(INT32 chip, INT32 /*flags*/) +void K051316_zoom_draw(INT32 chip, INT32 flags) { UINT32 startx,starty; INT32 incxx,incxy,incyx,incyy; @@ -228,7 +236,7 @@ void K051316_zoom_draw(INT32 chip, INT32 /*flags*/) startx -= (89 + K051316Offs[chip][0]) * incxx; starty -= (89 + K051316Offs[chip][0]) * incxy; - copy_roz(chip, startx << 5,starty << 5,incxx << 5,incxy << 5,incyx << 5,incyy << 5, K051316Wrap[chip], K051316TransColor[chip]+1); // transp.. + copy_roz(chip, startx << 5,starty << 5,incxx << 5,incxy << 5,incyx << 5,incyy << 5, K051316Wrap[chip], K051316TransColor[chip]+1, flags); // transp.. } void K051316RedrawTiles(INT32 chip) diff --git a/src/burn/drv/konami/k051960.cpp b/src/burn/drv/konami/k051960.cpp index 16d9da3ad..62040e082 100644 --- a/src/burn/drv/konami/k051960.cpp +++ b/src/burn/drv/konami/k051960.cpp @@ -11,8 +11,10 @@ static UINT8 *K051960Ram = NULL; static UINT8 K051960SpriteRomBank[3]; INT32 K051960ReadRoms; static INT32 K051960RomOffset; -static UINT32 K051960RomMask; static UINT8 *K051960Rom; +static UINT32 K051960RomMask; +static UINT8 *K051960RomExp; +static UINT32 K051960RomExpMask; static UINT8 blank_tile[0x100]; static INT32 nSpriteXOffset; @@ -21,7 +23,7 @@ static INT32 nSpriteYOffset; typedef void (*K051960_Callback)(INT32 *Code, INT32 *Colour, INT32 *Priority, INT32 *Shadow); static K051960_Callback K051960Callback; -void K051960SpritesRender(UINT8 *pSrc, INT32 Priority) +void K051960SpritesRender(INT32 min_priority, INT32 max_priority) { #define NUM_SPRITES 128 INT32 Offset, PriCode; @@ -31,7 +33,10 @@ void K051960SpritesRender(UINT8 *pSrc, INT32 Priority) for (Offset = 0; Offset < 0x400; Offset += 8) { if (K051960Ram[Offset] & 0x80) { - SortedList[K051960Ram[Offset] & 0x7f] = Offset; + if (max_priority == -1) /* draw front to back when using priority buffer */ + SortedList[(K051960Ram[Offset] & 0x7f) ^ 0x7f] = Offset; + else + SortedList[K051960Ram[Offset] & 0x7f] = Offset; } } @@ -52,9 +57,13 @@ void K051960SpritesRender(UINT8 *pSrc, INT32 Priority) Shadow = Colour & 0x80; K051960Callback(&Code, &Colour, &Pri, &Shadow); - if (Priority != -1) { - if (Pri != Priority) continue; // not the best way to go about this... - } + if (max_priority != -1) + if (Pri < min_priority || Pri > max_priority) + continue; + + if (Pri == 1 && (nSpriteEnable & 2) == 0) continue; + if (Pri == 2 && (nSpriteEnable & 4) == 0) continue; + if (Pri == 3 && (nSpriteEnable & 8) == 0) continue; Size = (K051960Ram[Offset + 1] & 0xe0) >> 5; w = Width[Size]; @@ -89,26 +98,24 @@ void K051960SpritesRender(UINT8 *pSrc, INT32 Priority) INT32 c = Code; sx = ox + 16 * x; - if (xFlip) c += xOffset[(w - 1 - x)]; + if (xFlip) c += xOffset[(w - 1 - x) & 7]; else c += xOffset[x]; - if (yFlip) c += yOffset[(h - 1 - y)]; + if (yFlip) c += yOffset[(h - 1 - y) & 7]; else c += yOffset[y]; sx &= 0x1ff; sx -= 104; sx -= nSpriteXOffset; - - if (xFlip) { - if (yFlip) { - Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, c, sx, sy, Colour, 4, 0, 0, pSrc); - } else { - Render16x16Tile_Mask_FlipX_Clip(pTransDraw, c, sx, sy, Colour, 4, 0, 0, pSrc); - } + + c &= K051960RomExpMask; + + if (Shadow) { + konami_render_zoom_shadow_tile(K051960RomExp, c, Colour * 16, sx, sy, xFlip, yFlip, 16, 16, 0x10000, 0x10000, (max_priority ==-1) ? Pri:0xffffffff, 0); } else { - if (yFlip) { - Render16x16Tile_Mask_FlipY_Clip(pTransDraw, c, sx, sy, Colour, 4, 0, 0, pSrc); + if (max_priority == -1) { + konami_draw_16x16_prio_tile(K051960RomExp, c, Colour * 16, sx, sy, xFlip, yFlip, Pri); } else { - Render16x16Tile_Mask_Clip(pTransDraw, c, sx, sy, Colour, 4, 0, 0, pSrc); + konami_draw_16x16_tile(K051960RomExp, c, Colour * 16, sx, sy, xFlip, yFlip); } } } @@ -127,16 +134,26 @@ void K051960SpritesRender(UINT8 *pSrc, INT32 Priority) sx = ox + ((xZoom * x + (1 << 11)) >> 12); zw = (ox + ((xZoom * (x + 1) + (1 << 11)) >> 12)) - sx; - if (xFlip) c += xOffset[(w - 1 - x)]; + if (xFlip) c += xOffset[(w - 1 - x) & 7]; else c += xOffset[x]; - if (yFlip) c += yOffset[(h - 1 - y)]; + if (yFlip) c += yOffset[(h - 1 - y) & 7]; else c += yOffset[y]; - + sx &= 0x1ff; sx -= 104; sx -= nSpriteXOffset; - RenderZoomedTile(pTransDraw, pSrc, c, Colour << 4 /*assume 4 bpp*/, 0, sx, sy, xFlip, yFlip, 16, 16, zw << 12, zh << 12); + c &= K051960RomExpMask; + + if (Shadow) { + konami_render_zoom_shadow_tile(K051960RomExp, c, Colour * 16, sx, sy, xFlip, yFlip, 16, 16, zw << 12, zh << 12, (max_priority ==-1) ? Pri:0xffffffff, 0); + } else { + if (max_priority == -1) { + konami_draw_16x16_priozoom_tile(K051960RomExp, c, Colour * 16, 0, sx, sy, xFlip, yFlip, 16, 16, zw << 12, zh << 12, Pri); + } else { + konami_draw_16x16_zoom_tile(K051960RomExp, c, Colour * 16, 0, sx, sy, xFlip, yFlip, 16, 16, zw << 12, zh << 12); + } + } } } } @@ -198,21 +215,25 @@ void K051960Reset() K051960_spriteflip = 0; } -void K051960Init(UINT8* pRomSrc, UINT32 RomMask) +void K051960Init(UINT8* pRomSrc, UINT8* pRomSrcExp, UINT32 RomMask) { nSpriteXOffset = nSpriteYOffset = 0; K051960Ram = (UINT8*)BurnMalloc(0x400); K051960RomMask = RomMask; + K051960RomExpMask = (RomMask * 2) / (16 * 16); K051960Rom = pRomSrc; + K051960RomExp = pRomSrcExp; KonamiIC_K051960InUse = 1; memset (blank_tile, 0, 0x100); nSpriteXOffset = nSpriteYOffset = 0; + + konami_allocate_bitmaps(); } void K051960Exit() @@ -222,7 +243,8 @@ void K051960Exit() K051960Callback = NULL; K051960RomMask = 0; K051960Rom = NULL; - + K051960RomExpMask = 0; + K051960RomExp = NULL; memset(K051960SpriteRomBank, 0, 3); K051960ReadRoms = 0; K051960RomOffset = 0; diff --git a/src/burn/drv/konami/k052109.cpp b/src/burn/drv/konami/k052109.cpp index 3ea9404ce..2f0773f80 100644 --- a/src/burn/drv/konami/k052109.cpp +++ b/src/burn/drv/konami/k052109.cpp @@ -16,6 +16,9 @@ INT32 K052109RMRDLine; static UINT8 K052109RomSubBank; static UINT32 K052109RomMask; static UINT8 *K052109Rom; +static UINT32 K052109RomExpMask; +static UINT8 *K052109RomExp; + static INT32 K052109FlipEnable; INT32 K052109_irq_enabled; @@ -141,12 +144,13 @@ void K052109AdjustScroll(INT32 x, INT32 y) } } -void K052109RenderLayerLineScroll(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) +void K052109RenderLayerLineScroll(INT32 nLayer, INT32 Flags, INT32 Priority) { - UINT16 *dst = pTransDraw; + UINT32 *dst = konami_temp_screen; + UINT16 *pdst = konami_priority_bitmap; - INT32 Priority = nLayer >> 4; - nLayer &= 0x03; + INT32 Category = Flags & 0xff; + INT32 Opaque = (Flags >> 16) & 1; for (INT32 my = 0; my < 256; my++) { @@ -182,7 +186,7 @@ void K052109RenderLayerLineScroll(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) K052109Callback(nLayer, Bank, &Code, &Colour, &xFlip, &Prio); - if (Prio != Priority) continue; + if (Prio != Category && Category) continue; if (xFlip && !(K052109FlipEnable & 1)) xFlip = 0; if (yFlip && !(K052109FlipEnable & 2)) yFlip = 0; @@ -198,12 +202,12 @@ void K052109RenderLayerLineScroll(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) if (x >= nScreenWidth) continue; - UINT8 *src = pSrc + (Code * 0x40); - src += (yFlip ? (~y & 7) : (y & 7)) << 3; + UINT8 *src = K052109RomExp + ((Code & K052109RomExpMask) * 0x40); + src += (yFlip ? (~my & 7) : (my & 7)) * 8; if (xFlip) xFlip = 0x07; - INT32 col = Colour << 4; + UINT32 *pal = konami_palette32 + (Colour * 16); for (INT32 xx = 0; xx < 8; xx++, x++) { if (x < 0 || x >= nScreenWidth) continue; @@ -211,25 +215,29 @@ void K052109RenderLayerLineScroll(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) INT32 pxl = src[xx ^ xFlip]; if (!Opaque && !pxl) continue; - dst[x] = col | pxl; + dst[x] = pal[pxl]; + pdst[x] = Priority; } } + pdst += nScreenWidth; dst += nScreenWidth; } } -void K052109RenderLayer(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) +void K052109RenderLayer(INT32 nLayer, INT32 Flags, INT32 Priority) { + nLayer &= 0x03; + if (K052109EnableLine[nLayer]) { - K052109RenderLayerLineScroll(nLayer, Opaque, pSrc); + K052109RenderLayerLineScroll(nLayer, Flags, Priority); return; } - INT32 mx, my, Bank, Code, Colour, x, y, xFlip = 0, yFlip, Priority, TileIndex = 0; + INT32 Category = Flags & 0xff; + INT32 Opaque = (Flags >> 16) & 1; - Priority = nLayer >> 4; - nLayer &= 0x03; + INT32 mx, my, Bank, Code, Colour, x, y, xFlip = 0, yFlip, TileIndex = 0; for (my = 0; my < 32; my++) { for (mx = 0; mx < 64; mx++) { @@ -260,7 +268,7 @@ void K052109RenderLayer(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) K052109Callback(nLayer, Bank, &Code, &Colour, &xFlip, &Prio); - if (Prio != Priority) continue; + if (Prio != Category && Category) continue; if (xFlip && !(K052109FlipEnable & 1)) xFlip = 0; if (yFlip && !(K052109FlipEnable & 2)) yFlip = 0; @@ -282,63 +290,24 @@ void K052109RenderLayer(INT32 nLayer, INT32 Opaque, UINT8 *pSrc) if (x >= nScreenWidth || y >= nScreenHeight) continue; - if (Opaque) { - if (x >= 0 && x <= (nScreenWidth - 8) && y >= 0 && y <= (nScreenHeight - 8)) { - if (xFlip) { - if (yFlip) { - Render8x8Tile_FlipXY(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } else { - Render8x8Tile_FlipX(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } - } else { - if (yFlip) { - Render8x8Tile_FlipY(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } else { - Render8x8Tile(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } - } - } else { - if (xFlip) { - if (yFlip) { - Render8x8Tile_FlipXY_Clip(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } else { - Render8x8Tile_FlipX_Clip(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } - } else { - if (yFlip) { - Render8x8Tile_FlipY_Clip(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } else { - Render8x8Tile_Clip(pTransDraw, Code, x, y, Colour, 4, 0, pSrc); - } - } - } - } else { - if (x >= 0 && x <= (nScreenWidth - 8) && y >= 0 && y <= (nScreenHeight - 8)) { - if (xFlip) { - if (yFlip) { - Render8x8Tile_Mask_FlipXY(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } else { - Render8x8Tile_Mask_FlipX(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } - } else { - if (yFlip) { - Render8x8Tile_Mask_FlipY(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } else { - Render8x8Tile_Mask(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } - } - } else { - if (xFlip) { - if (yFlip) { - Render8x8Tile_Mask_FlipXY_Clip(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } else { - Render8x8Tile_Mask_FlipX_Clip(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } - } else { - if (yFlip) { - Render8x8Tile_Mask_FlipY_Clip(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); - } else { - Render8x8Tile_Mask_Clip(pTransDraw, Code, x, y, Colour, 4, 0, 0, pSrc); + { + UINT8 *gfx = K052109RomExp + (Code & K052109RomExpMask) * 0x40; + + INT32 flip = 0; + if (xFlip) flip |= 0x07; + if (yFlip) flip |= 0x38; + + UINT32 *pal = konami_palette32 + (Colour * 16); + INT32 trans = (Opaque) ? 0xffff : 0; + + for (INT32 yy = 0; yy < 8; yy++) { + for (INT32 xx = 0; xx < 8; xx++) { + if ((x+xx) >= 0 && (x+xx) < nScreenWidth && (y+yy) >= 0 && (y+yy) < nScreenHeight) { + INT32 pxl = gfx[((yy*8)+xx)^flip]; + if (pxl != trans) { + konami_temp_screen[((yy+y)*nScreenWidth) + x + xx] = pal[pxl]; + konami_priority_bitmap[((yy+y)*nScreenWidth) + x + xx] = Priority; + } } } } @@ -475,13 +444,15 @@ void K052109Reset() memset (K052109ScrollCols, 0, 64 * 3 * sizeof(INT32)); } -void K052109Init(UINT8 *pRomSrc, UINT32 RomMask) +void K052109Init(UINT8 *pRomSrc, UINT8 *pRomSrcExp, UINT32 RomMask) { K052109Ram = (UINT8*)BurnMalloc(0x6000); K052109RomMask = RomMask; + K052109RomExpMask = (RomMask * 2) / (8 * 8); K052109Rom = pRomSrc; + K052109RomExp = pRomSrcExp; KonamiIC_K052109InUse = 1; @@ -490,6 +461,8 @@ void K052109Init(UINT8 *pRomSrc, UINT32 RomMask) K052109ScrollYOff[i]=0; } + konami_allocate_bitmaps(); + has_extra_video_ram = 0; } diff --git a/src/burn/drv/konami/k053245.cpp b/src/burn/drv/konami/k053245.cpp index 60cdb5a6d..dd4f1fd08 100644 --- a/src/burn/drv/konami/k053245.cpp +++ b/src/burn/drv/konami/k053245.cpp @@ -6,11 +6,13 @@ static void (*K053245Callback[2])(INT32 *code,INT32 *color,INT32 *priority); static UINT8 *K053245Ram[2]; static UINT8 *K053245Buf[2]; static UINT8 *K053245Gfx[2]; +static UINT8 *K053245GfxExp[2]; static INT32 K053245Mask[2]; +static INT32 K053245MaskExp[2]; static INT32 K053245_dx[2]; static INT32 K053245_dy[2]; -static UINT16 *K053245Temp = NULL; +static UINT32 *K053245Temp = NULL; static UINT8 K053244Regs[2][0x10]; static INT32 K053244Bank[2]; @@ -41,14 +43,16 @@ void K053245GfxDecode(UINT8 *src, UINT8 *dst, INT32 len) GfxDecode(len >> 7, 4, 16, 16, Plane, XOffs, YOffs, 0x400, src, dst); } -void K053245Init(INT32 chip, UINT8 *gfx, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *priority)) +void K053245Init(INT32 chip, UINT8 *gfx, UINT8 *gfxexp, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *priority)) { K053245Ram[chip] = (UINT8*)BurnMalloc(0x800); // enough K053245Buf[chip] = (UINT8*)BurnMalloc(0x800); // enough K053245Mask[chip] = mask; + K053245MaskExp[chip] = (mask * 2) / (16 * 16); K053245Gfx[chip] = gfx; + K053245GfxExp[chip] = gfxexp; K053245Callback[chip] = callback; @@ -56,11 +60,7 @@ void K053245Init(INT32 chip, UINT8 *gfx, INT32 mask, void (*callback)(INT32 *cod KonamiIC_K053245InUse = 1; - if (konami_temp_screen == NULL) { - INT32 width, height; - BurnDrvGetVisibleSize(&width, &height); - konami_temp_screen = (UINT16*)BurnMalloc(width * height * 2); - } + konami_allocate_bitmaps(); K053245Temp = konami_temp_screen; @@ -69,7 +69,7 @@ void K053245Init(INT32 chip, UINT8 *gfx, INT32 mask, void (*callback)(INT32 *cod void K053245Exit() { - K053245Temp = NULL; + //K053245Temp = NULL; for (INT32 i = 0; i < K053245Active; i++) { BurnFree (K053245Ram[i]); @@ -173,55 +173,7 @@ void K053244Write(INT32 chip, INT32 offset, INT32 data) // Sprite Rendering -static void RenderZoomedShadowTile(UINT8 *gfx, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy) -{ - INT32 h = ((zoomy << 4) + 0x8000) >> 16; - INT32 w = ((zoomx << 4) + 0x8000) >> 16; - - if (!h || !w || sx + w < 0 || sy + h < 0 || sx >= nScreenWidth || sy >= nScreenHeight) return; - - if (fy) fy = (height-1)*width; - if (fx) fy |= (width-1); - - INT32 hz = (height << 12) / h; - INT32 wz = (width << 12) / w; - - INT32 starty = 0, startx = 0, endy = h, endx = w; - if (sy < 0) starty = 0 - sy; - if (sx < 0) startx = 0 - sx; - if (sy + h >= nScreenHeight) endy -= (h + sy) - nScreenHeight; - if (sx + w >= nScreenWidth ) endx -= (w + sx) - nScreenWidth; - - UINT8 *src = gfx + (code * width * height); - UINT16 *dst = konami_temp_screen + (sy + starty) * nScreenWidth + sx; - UINT16 *pTemp = pTransDraw + (sy + starty) * nScreenWidth + sx; - - INT32 or1 = 0x8000; - - for (INT32 y = starty; y < endy; y++) - { - INT32 zy = ((y * hz) >> 12) * width; - - for (INT32 x = startx; x < endx; x++) - { - INT32 pxl = src[(zy + ((x * wz) >> 12)) ^ fy]; - - if (pxl) { - if (pxl == 15) { - dst[x] = color | pxl; - pTemp[x] |= or1; - } else { - pTemp[x] = color | pxl; - } - } - } - - dst += nScreenWidth; - pTemp += nScreenWidth; - } -} - -void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority) +void K053245SpritesRender(INT32 chip) { #define NUM_SPRITES 128 INT32 offs,pri_code,i; @@ -238,6 +190,8 @@ void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority) UINT16 *sprbuf = (UINT16*)K053245Buf[chip]; + UINT8 *gfxdata = K053245GfxExp[chip]; + /* prebuild a sorted table */ for (i=0x800/2, offs=0; offs= 0; pri_code--) { INT32 ox,oy,color,code,size,w,h,x,y,flipx,flipy,mirrorx,mirrory,shadow,zoomx,zoomy,pri; @@ -267,8 +221,6 @@ void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority) (*K053245Callback[chip])(&code,&color,&pri); - if (pri != priority) continue;//------------------------------------------------------- OK?? - size = (BURN_ENDIAN_SWAP_INT16(sprbuf[offs]) & 0x0f00) >> 8; w = 1 << (size & 0x03); @@ -289,7 +241,7 @@ void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority) if (zoomx > 0x2000) continue; if (zoomx) zoomx = (0x400000+zoomx/2) / zoomx; else zoomx = 2 * 0x400000; -// else zoomx = zoomy; /* workaround for TMNT2 */ +// else zoomx = zoomy; /* workaround for TMNT2 */ } else zoomx = zoomy; @@ -381,32 +333,20 @@ void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority) fy = flipy; } - c = (c & 0x3f) | (code & ~0x3f); + c = ((c & 0x3f) | (code & ~0x3f)) & K053245MaskExp[chip]; if (shadow) { - RenderZoomedShadowTile(gfxdata, c, color << 4, sx, sy, fx, fy, 16, 16, zw << 12, zh << 12); + konami_render_zoom_shadow_tile(gfxdata, c, color * 16, sx, sy, fx, fy, 16, 16, zw << 12, zh << 12, pri, 0); continue; } if (zoomx == 0x10000 && zoomy == 0x10000) { - if (fy) { - if (fx) { - Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxdata); - } else { - Render16x16Tile_Mask_FlipY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxdata); - } - } else { - if (fx) { - Render16x16Tile_Mask_FlipX_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxdata); - } else { - Render16x16Tile_Mask_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxdata); - } - } + konami_draw_16x16_prio_tile(gfxdata, c, color * 16, sx, sy, fx, fy, pri); } else { - RenderZoomedTile(pTransDraw, gfxdata, c, color << 4, 0, sx, sy, fx, fy, 16, 16, zw << 12, zh << 12); + konami_draw_16x16_priozoom_tile(gfxdata, c, color * 16, 0, sx, sy, fx, fy, 16, 16, zw << 12, zh << 12, pri); } } } diff --git a/src/burn/drv/konami/k053247.cpp b/src/burn/drv/konami/k053247.cpp index be8cbb21c..1fd9db7dc 100644 --- a/src/burn/drv/konami/k053247.cpp +++ b/src/burn/drv/konami/k053247.cpp @@ -11,8 +11,10 @@ static UINT16 K053247Regs[16]; static UINT8 *K053246Gfx; static UINT32 K053246Mask; +static UINT8 *K053246GfxExp; +static UINT32 K053246MaskExp; -static UINT16 *K053247Temp = NULL; +static UINT32 *K053247Temp = NULL; static INT32 K053247_dx; static INT32 K053247_dy; @@ -57,24 +59,23 @@ void K053247Scan(INT32 nAction) } } -void K053247Init(UINT8 *gfxrom, INT32 gfxlen, void (*Callback)(INT32 *code, INT32 *color, INT32 *priority), INT32 flags) +void K053247Init(UINT8 *gfxrom, UINT8 *gfxromexp, INT32 gfxlen, void (*Callback)(INT32 *code, INT32 *color, INT32 *priority), INT32 flags) { K053247Ram = (UINT8*)BurnMalloc(0x1000); K053246Gfx = gfxrom; K053246Mask = gfxlen; + K053246GfxExp = gfxromexp; + K053246MaskExp = (gfxlen * 2) / (16 * 16); + K053247Callback = Callback; K053247_dx = 0; K053247_dy = 0; K053247_wraparound = 1; - if (konami_temp_screen == NULL) { - INT32 width, height; - BurnDrvGetVisibleSize(&width, &height); - konami_temp_screen = (UINT16*)BurnMalloc(width * height * 2); - } + konami_allocate_bitmaps(); K053247Temp = konami_temp_screen; @@ -85,7 +86,7 @@ void K053247Init(UINT8 *gfxrom, INT32 gfxlen, void (*Callback)(INT32 *code, INT3 void K053247Exit() { - K053247Temp = NULL; +// K053247Temp = NULL; BurnFree (K053247Ram); @@ -176,58 +177,11 @@ INT32 K053246_is_IRQ_enabled() return K053246Regs[5] & 0x10; } -static void RenderZoomedShadowTile(UINT8 *gfx, INT32 code, INT32 color, UINT8 *t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, INT32 highlight) -{ - INT32 h = ((zoomy << 4) + 0x8000) >> 16; - INT32 w = ((zoomx << 4) + 0x8000) >> 16; - - if (!h || !w || sx + w < 0 || sy + h < 0 || sx >= nScreenWidth || sy >= nScreenHeight) return; - - if (fy) fy = (height-1)*width; - if (fx) fy |= (width-1); - - INT32 hz = (height << 12) / h; - INT32 wz = (width << 12) / w; - - INT32 starty = 0, startx = 0, endy = h, endx = w; - if (sy < 0) starty = 0 - sy; - if (sx < 0) startx = 0 - sx; - if (sy + h >= nScreenHeight) endy -= (h + sy) - nScreenHeight; - if (sx + w >= nScreenWidth ) endx -= (w + sx) - nScreenWidth; - - UINT8 *src = gfx + (code * width * height); - UINT16 *dst = K053247Temp + (sy + starty) * nScreenWidth + sx; - UINT16 *pTemp = pTransDraw + (sy + starty) * nScreenWidth + sx; - - INT32 or1 = 0x8000 >> highlight; - - for (INT32 y = starty; y < endy; y++) - { - INT32 zy = ((y * hz) >> 12) * width; - - for (INT32 x = startx; x < endx; x++) - { - INT32 pxl = src[(zy + ((x * wz) >> 12)) ^ fy]; - - if (pxl) { - if (t[pxl] == 2) { - dst[x] = color | pxl; - pTemp[x] |= or1; - } else { - pTemp[x] = color | pxl; - } - } - } - - dst += nScreenWidth; - pTemp += nScreenWidth; - } -} - -void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) +void K053247SpritesRender() { #define NUM_SPRITES 256 + UINT8 dtable[256]; UINT8 stable[256]; UINT8 *wtable; @@ -252,6 +206,8 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) UINT16 *SprRam = (UINT16*)K053247Ram; + UINT8 *gfxbase = K053246GfxExp; + INT32 screen_width = nScreenWidth-1; if (K053247Flags & 1) { @@ -314,7 +270,7 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) } } - for (INT32 i = 0; i <= count; i++) + for (INT32 i = count; i >= 0; i--) { offs = sortedlist[i]; @@ -324,8 +280,6 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) (*K053247Callback)(&code,&color,&primask); - if (primask != priority) continue; //--------------------------------------- fix me! - temp = BURN_ENDIAN_SWAP_INT16(SprRam[offs]); size = (temp & 0x0f00) >> 8; @@ -384,12 +338,14 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) INT32 highlight = 0; wtable = dtable; + if (color == -1) { // drop the entire sprite to shadow unconditionally if (shdmask < 0) continue; color = 0; shadow = -1; + wtable = stable; } else @@ -397,6 +353,7 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) if (shdmask >= 0) { shadow = (color & 0x20000000) ? (color >> 20) : (shadow >> 10); + if (shadow &= 3) { if (((shadow-1) & shdmask) == 1) highlight = 1; } @@ -501,60 +458,30 @@ void K053247SpritesRender(UINT8 *gfxbase, INT32 priority) fy = flipy; } + c &= K053246MaskExp; + if (shadow || wtable == stable) { if (mirrory && h == 1) - RenderZoomedShadowTile(gfxbase, c, color << 4, wtable, sx, sy, flipx, !flipy, 16, 16, zw << 12, zh << 12, highlight); + konami_render_zoom_shadow_tile(gfxbase, c, color * 16, sx, sy, flipx, !flipy, 16, 16, zw << 12, zh << 12, primask, highlight); - RenderZoomedShadowTile(gfxbase, c, color << 4, wtable, sx, sy, flipx, flipy, 16, 16, zw << 12, zh << 12, highlight); + konami_render_zoom_shadow_tile(gfxbase, c, color * 16, sx, sy, flipx, flipy, 16, 16, zw << 12, zh << 12, primask, highlight); continue; } if (mirrory && h == 1) { - if (nozoom) - { - if (!flipy) { - if (flipx) { - Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } else { - Render16x16Tile_Mask_FlipY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } - } else { - if (flipx) { - Render16x16Tile_Mask_FlipX_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } else { - Render16x16Tile_Mask_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } - } - } - else - { - RenderZoomedTile(pTransDraw, gfxbase, c, color << 4, 0, sx, sy, fx, !fy, 16, 16, (zw << 16) >> 4, (zh << 16) >> 4); - } - } - - if (nozoom) - { - if (flipy) { - if (flipx) { - Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } else { - Render16x16Tile_Mask_FlipY_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } + if (nozoom) { + konami_draw_16x16_prio_tile(gfxbase, c, color * 16, sx, sy, flipx, !flipy, primask); } else { - if (flipx) { - Render16x16Tile_Mask_FlipX_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } else { - Render16x16Tile_Mask_Clip(pTransDraw, c, sx, sy, color, 4, 0, 0, gfxbase); - } + konami_draw_16x16_priozoom_tile(gfxbase, c, color * 16, 0, sx, sy, fx, !fy, 16, 16, zw<<12, zh<<12, primask); } } - else - { - RenderZoomedTile(pTransDraw, gfxbase, c, color << 4, 0, sx, sy, fx, fy, 16, 16, (zw << 16) >> 4, (zh << 16) >> 4); + + if (nozoom) { + konami_draw_16x16_prio_tile(gfxbase, c, color * 16, sx, sy, flipx, flipy, primask); + } else { + konami_draw_16x16_priozoom_tile(gfxbase, c, color * 16, 0, sx, sy, fx, fy, 16, 16, zw<<12, zh<<12, primask); } - - } // end of X loop } // end of Y loop diff --git a/src/burn/drv/konami/k053936.cpp b/src/burn/drv/konami/k053936.cpp index fc106fe52..5e41197d2 100644 --- a/src/burn/drv/konami/k053936.cpp +++ b/src/burn/drv/konami/k053936.cpp @@ -49,6 +49,8 @@ void K053936Init(INT32 chip, UINT8 *ram, INT32 len, INT32 w, INT32 h, void (*pCa pTileCallback1 = pCallback; } + konami_allocate_bitmaps(); + KonamiIC_K053936InUse = 1; } @@ -115,7 +117,8 @@ void K053936PredrawTiles(INT32 chip, UINT8 *gfx, INT32 transparent, INT32 tcol) static inline void copy_roz(INT32 chip, INT32 minx, INT32 maxx, INT32 miny, INT32 maxy, UINT32 startx, UINT32 starty, INT32 incxx, INT32 incxy, INT32 incyx, INT32 incyy, INT32 transp) { - UINT16 *dst = pTransDraw; + UINT32 *dst = konami_temp_screen; + UINT32 *pal = konami_palette32; UINT16 *src = tscreen[chip]; INT32 hmask = nHeight[chip] - 1; @@ -135,7 +138,7 @@ static inline void copy_roz(INT32 chip, INT32 minx, INT32 maxx, INT32 miny, INT3 INT32 pxl = src[(((cy >> 16) & hmask) << 10) + ((cx >> 16) & wmask)]; if (!(pxl & 0x8000)) { - *dst = pxl; + *dst = pal[pxl]; } } } else { @@ -149,14 +152,14 @@ static inline void copy_roz(INT32 chip, INT32 minx, INT32 maxx, INT32 miny, INT3 INT32 pxl = src[(yy << 10) + xx]; if (!(pxl & 0x8000)) { - *dst = pxl; + *dst = pal[pxl]; } } } } else { if (wrap) { for (INT32 x = minx; x < maxx; x++, cx+=incxx, cy+=incxy, dst++) { - *dst = src[(((cy >> 16) & hmask) << 10) + ((cx >> 16) & wmask)] & 0x7fff; + *dst = pal[src[(((cy >> 16) & hmask) << 10) + ((cx >> 16) & wmask)] & 0x7fff]; } } else { for (INT32 x = minx; x < maxx; x++, cx+=incxx, cy+=incxy, dst++) { @@ -165,7 +168,7 @@ static inline void copy_roz(INT32 chip, INT32 minx, INT32 maxx, INT32 miny, INT3 INT32 xx = cx >> 16; if (xx > wmask || xx < 0) continue; - *dst = src[(yy << 10) + xx] & 0x7fff; + *dst = pal[src[(yy << 10) + xx] & 0x7fff]; } } } diff --git a/src/burn/drv/konami/konamiic.cpp b/src/burn/drv/konami/konamiic.cpp index 001ca8357..419141fc4 100644 --- a/src/burn/drv/konami/konamiic.cpp +++ b/src/burn/drv/konami/konamiic.cpp @@ -8,9 +8,13 @@ UINT32 KonamiIC_K053245InUse = 0; UINT32 KonamiIC_K053247InUse = 0; UINT32 KonamiIC_K053936InUse = 0; -UINT16 *konami_temp_screen = NULL; +UINT32 *konami_temp_screen = NULL; INT32 K05324xZRejection = -1; +UINT32 *konami_palette32; + +UINT16 *konami_priority_bitmap = NULL; + void K05324xSetZRejection(INT32 z) { K05324xZRejection = z; @@ -84,7 +88,7 @@ void KonamiRecalcPal(UINT8 *src, UINT32 *dst, INT32 len) g = (g << 3) | (g >> 2); b = (b << 3) | (b >> 2); - dst[i] = BurnHighCol(r, g, b, 0); + dst[i] = (r << 16) | (g << 8) | b; // 32-bit colors } } @@ -105,7 +109,15 @@ void KonamiICReset() void KonamiICExit() { - BurnFree (konami_temp_screen); + if (konami_temp_screen) { + BurnFree (konami_temp_screen); + konami_temp_screen = NULL; + } + + if (konami_priority_bitmap) { + BurnFree(konami_priority_bitmap); + konami_priority_bitmap = NULL; + } if (KonamiIC_K051960InUse) K051960Exit(); if (KonamiIC_K052109InUse) K052109Exit(); @@ -137,40 +149,299 @@ void KonamiICScan(INT32 nAction) K051733Scan(nAction); } -/* - Transfer and blend pixels - * highlights are right? where is this used? - * also, has a limitation of 0x4000 colors, some games may need more. -*/ -void KonamiBlendCopy(UINT32 *palette /* 32-bit color */, UINT32 *drvpalette /* n-bit color */) +void konami_allocate_bitmaps() { - UINT8 *dst = pBurnDraw; + INT32 width, height; + BurnDrvGetVisibleSize(&width, &height); - for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) - { - if (pTransDraw[i] >= 0x4000) // shadow & highlight - { - UINT32 source = palette[pTransDraw[i] & 0x3fff]; - UINT32 blend = palette[konami_temp_screen[i] & 0x3fff]; + if (konami_temp_screen == NULL) { + konami_temp_screen = (UINT32*)BurnMalloc(width * height * sizeof(INT32)); + } - INT32 a = 0x99; // shadow (255 * 0.60) - if (pTransDraw[i] & 0x4000) a = 0xa9; // highlight (255 * (1 / 0.60)) & 0xff; (0x1a9 otherwise) right? - - INT32 ad = 256 - a; - - // ripped from MAME... - UINT32 p = ((((source & 0x0000ff) * a + (blend & 0x0000ff) * ad) >> 8)) | - ((((source & 0x00ff00) * a + (blend & 0x00ff00) * ad) >> 8) & 0x00ff00) | - ((((source & 0xff0000) * a + (blend & 0xff0000) * ad) >> 8) & 0xff0000); - - PutPix(dst, BurnHighCol(p >> 16, p >> 8, p, 0)); - } - else // normal - { - PutPix(dst, drvpalette[pTransDraw[i]]); - } - - dst += nBurnBpp; + if (konami_priority_bitmap == NULL) { + konami_priority_bitmap = (UINT16*)BurnMalloc(width * height * sizeof(INT16)); } } + + +void KonamiBlendCopy(UINT32 *pPalette) +{ + pBurnDrvPalette = pPalette; + + UINT32 *bmp = konami_temp_screen; + + for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) { + PutPix(pBurnDraw + (i * nBurnBpp), BurnHighCol(bmp[i]>>16, (bmp[i]>>8)&0xff, bmp[i]&0xff, 0)); + } +} + +void konami_draw_16x16_priozoom_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, UINT32 priority) +{ + // Based on MAME sources for tile zooming + UINT8 *gfx_base = gfx + (code * width * height); + int dh = (zoomy * height + 0x8000) / 0x10000; + int dw = (zoomx * width + 0x8000) / 0x10000; + + priority |= 1<<31; // always on! + + UINT32 *pal = konami_palette32 + color; + + if (dw && dh) + { + int dx = (width * 0x10000) / dw; + int dy = (height * 0x10000) / dh; + int ex = sx + dw; + int ey = sy + dh; + int x_index_base = 0; + int y_index = 0; + + if (fx) { + x_index_base = (dw - 1) * dx; + dx = -dx; + } + + if (fy) { + y_index = (dh - 1) * dy; + dy = -dy; + } + + for (INT32 y = sy; y < ey; y++) + { + UINT8 *src = gfx_base + (y_index / 0x10000) * width; + UINT32 *dst = konami_temp_screen + y * nScreenWidth; + UINT16 *prio = konami_priority_bitmap + y * nScreenWidth; + + if (y >= 0 && y < nScreenHeight) + { + for (INT32 x = sx, x_index = x_index_base; x < ex; x++) + { + if ((priority & (1 << (prio[x] & 0x1f)))==0) { + + if (x >= 0 && x < nScreenWidth) { + INT32 pxl = src[x_index>>16]; + + if (pxl != t) { + dst[x] = pal[pxl]; + prio[x] = 0x1f; + } + } + } + + x_index += dx; + } + } + + y_index += dy; + } + } +} + +void konami_draw_16x16_zoom_tile(UINT8 *gfxbase, INT32 code, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy) +{ + // Based on MAME sources for tile zooming + UINT8 *gfx_base = gfxbase + (code * width * height); + int dh = (zoomy * height + 0x8000) / 0x10000; + int dw = (zoomx * width + 0x8000) / 0x10000; + + UINT32 *pal = konami_palette32 + color; + + if (dw && dh) + { + int dx = (width * 0x10000) / dw; + int dy = (height * 0x10000) / dh; + int ex = sx + dw; + int ey = sy + dh; + int x_index_base = 0; + int y_index = 0; + + if (fx) { + x_index_base = (dw - 1) * dx; + dx = -dx; + } + + if (fy) { + y_index = (dh - 1) * dy; + dy = -dy; + } + + for (INT32 y = sy; y < ey; y++) + { + UINT8 *src = gfx_base + (y_index / 0x10000) * width; + UINT32 *dst = konami_temp_screen + y * nScreenWidth; + + if (y >= 0 && y < nScreenHeight) + { + for (INT32 x = sx, x_index = x_index_base; x < ex; x++) + { + if (x >= 0 && x < nScreenWidth) { + INT32 pxl = src[x_index>>16]; + + if (pxl != t) { + dst[x] = pal[pxl]; + } + } + + x_index += dx; + } + } + + y_index += dy; + } + } +} + +void konami_draw_16x16_prio_tile(UINT8 *gfxbase, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy, UINT32 priority) +{ + INT32 flip = 0; + if (flipx) flip |= 0x0f; + if (flipy) flip |= 0xf0; + + UINT8 *gfx = gfxbase + code * 0x100; + + UINT16 *pri = konami_priority_bitmap + (sy * nScreenWidth) + sx; + UINT32 *dst = konami_temp_screen + (sy * nScreenWidth) + sx; + UINT32 *pal = konami_palette32 + color; + + priority |= 1 << 31; // always on! + + for (INT32 y = 0; y < 16; y++, sy++) { + for (INT32 x = 0; x < 16; x++) { + if ((sx+x) >=0 && (sx+x) < nScreenWidth && sy >= 0 && sy < nScreenHeight) { + INT32 pxl = gfx[((y*16)+x)^flip]; + + if (pxl) { + if ((priority & (1 << (pri[x] & 0x1f)))==0) { + dst[x] = pal[pxl]; + pri[x] = 0x1f; + } + } + } + } + + pri += nScreenWidth; + dst += nScreenWidth; + } +} + +void konami_draw_16x16_tile(UINT8 *gfxbase, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy) +{ + INT32 flip = 0; + if (flipx) flip |= 0x0f; + if (flipy) flip |= 0xf0; + + UINT8 *gfx = gfxbase + code * 0x100; + + UINT32 *pal = konami_palette32 + color; + UINT32 *dst = konami_temp_screen + (sy * nScreenWidth) + sx; + + for (INT32 y = 0; y < 16; y++) { + for (INT32 x = 0; x < 16; x++) { + if ((sx+x)>=0 && (sx+x)=0 && (sy+y)> 16; + INT32 w = ((zoomx << 4) + 0x8000) >> 16; + + if (!h || !w || sx + w < 0 || sy + h < 0 || sx >= nScreenWidth || sy >= nScreenHeight) return; + + if (fy) fy = (height-1)*width; + if (fx) fy |= (width-1); + + INT32 hz = (height << 12) / h; + INT32 wz = (width << 12) / w; + + INT32 starty = 0, startx = 0, endy = h, endx = w; + if (sy < 0) starty = 0 - sy; + if (sx < 0) startx = 0 - sx; + if (sy + h >= nScreenHeight) endy -= (h + sy) - nScreenHeight; + if (sx + w >= nScreenWidth ) endx -= (w + sx) - nScreenWidth; + + UINT8 *src = gfxbase + (code * width * height); + UINT32 *dst = konami_temp_screen + (sy + starty) * nScreenWidth + sx; + UINT16 *pri = konami_priority_bitmap + (sy + starty) * nScreenWidth + sx; + UINT32 *pal = konami_palette32 + color; + + if (priority == 0xffffffff) + { + for (INT32 y = starty; y < endy; y++) + { + INT32 zy = ((y * hz) >> 12) * width; + + for (INT32 x = startx; x < endx; x++) + { + INT32 pxl = src[(zy + ((x * wz) >> 12)) ^ fy]; + + if (pxl) { + if (pxl == 0x0f) { + dst[x] = shadow_blend(dst[x]); + } else { + dst[x] = pal[pxl]; + } + } + } + + dst += nScreenWidth; + } + } else { + priority |= 1<<31; // always on! + + for (INT32 y = starty; y < endy; y++) + { + INT32 zy = ((y * hz) >> 12) * width; + + for (INT32 x = startx; x < endx; x++) + { + INT32 pxl = src[(zy + ((x * wz) >> 12)) ^ fy]; + + if (pxl) { + if (pxl == 0x0f) { + if ((priority & (1 << (pri[x]&0x1f)))==0 && (pri[x] & 0x80) == 0) { + //if (highlight) { + // dst[x] = highlight_blend(dst[x]); + //} else { + dst[x] = shadow_blend(dst[x]); + //} + pri[x] |= 0x80; + } + } else { + if ((priority & (1 << (pri[x]&0x1f)))==0) { + dst[x] = pal[pxl]; + pri[x] = 0x1f; + } + } + } + } + + pri += nScreenWidth; + dst += nScreenWidth; + } + } +} + diff --git a/src/burn/drv/konami/konamiic.h b/src/burn/drv/konami/konamiic.h index b3a5d6ea5..8f422831c 100644 --- a/src/burn/drv/konami/konamiic.h +++ b/src/burn/drv/konami/konamiic.h @@ -7,8 +7,19 @@ extern UINT32 KonamiIC_K053245InUse; extern UINT32 KonamiIC_K053247InUse; extern UINT32 KonamiIC_K053936InUse; -extern UINT16 *konami_temp_screen; -void KonamiBlendCopy(UINT32 *palette /* 32-bit color */, UINT32 *drvpalette /* n-bit color */); +extern UINT16 *konami_priority_bitmap; + +extern UINT32 *konami_temp_screen; +extern UINT32 *konami_palette32; +void KonamiBlendCopy(UINT32 *palette); + +void konami_allocate_bitmaps(); + +void konami_draw_16x16_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy); +void konami_draw_16x16_prio_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy, UINT32 priority); +void konami_draw_16x16_zoom_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy); +void konami_draw_16x16_priozoom_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, UINT32 priority); +void konami_render_zoom_shadow_tile(UINT8 *gfx, INT32 code, INT32 color, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, UINT32 priority, INT32 shadow); extern INT32 K05324xZRejection; void K05324xSetZRejection(INT32 z); @@ -30,14 +41,14 @@ UINT8 K052109_051960_r(INT32 offset); //--------------------------------------------------------------------------------------------------------------- extern INT32 K051960ReadRoms; extern INT32 K052109_irq_enabled; -void K051960SpritesRender(UINT8 *pSrc, INT32 priority); +void K051960SpritesRender(INT32 min_priority, INT32 max_priority); UINT8 K0519060FetchRomData(UINT32 Offset); UINT8 K051960Read(UINT32 Offset); void K051960Write(UINT32 Offset, UINT8 Data); void K051960SetCallback(void (*Callback)(INT32 *Code, INT32 *Colour, INT32 *Priority, INT32 *Shadow)); void K051960SetSpriteOffset(INT32 x, INT32 y); void K051960Reset(); -void K051960Init(UINT8* pRomSrc, UINT32 RomMask); +void K051960Init(UINT8* pRomSrc, UINT8* pRomSrcExp, UINT32 RomMask); void K051960Exit(); void K051960Scan(INT32 nAction); void K051937Write(UINT32 Offset, UINT8 Data); @@ -52,12 +63,16 @@ extern INT32 K051960_spriteflip; void K052109UpdateScroll(); void K052109AdjustScroll(INT32 x, INT32 y); -void K052109RenderLayer(INT32 nLayer, INT32 Opaque, UINT8 *pSrc); + +#define K052109_OPAQUE 0x10000 +#define K052109_CATEGORY(x) (x) + +void K052109RenderLayer(INT32 nLayer, INT32 Flags, INT32 Priority); UINT8 K052109Read(UINT32 Offset); void K052109Write(UINT32 Offset, UINT8 Data); void K052109SetCallback(void (*Callback)(INT32 Layer, INT32 Bank, INT32 *Code, INT32 *Colour, INT32 *xFlip, INT32 *priority)); void K052109Reset(); -void K052109Init(UINT8 *pRomSrc, UINT32 RomMask); +void K052109Init(UINT8 *pRomSrc, UINT8* pRomSrcExp, UINT32 RomMask); void K052109Exit(); void K052109Scan(INT32 nAction); @@ -152,10 +167,10 @@ void K051316Scan(INT32 nAction); //--------------------------------------------------------------------------------------------------------------- INT32 K053245Reset(); void K053245GfxDecode(UINT8 *src, UINT8 *dst, INT32 len); -void K053245Init(INT32 chip, UINT8 *gfx, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *priority)); +void K053245Init(INT32 chip, UINT8 *gfx, UINT8 *gfxexp, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *priority)); void K053245Exit(); -void K053245SpritesRender(INT32 chip, UINT8 *gfxdata, INT32 priority); +void K053245SpritesRender(INT32 chip); void K053245SetSpriteOffset(INT32 chip,INT32 offsx, INT32 offsy); void K053245ClearBuffer(INT32 chip); @@ -190,7 +205,7 @@ void K053251Scan(INT32 nAction); // K053247.cpp //--------------------------------------------------------------------------------------------------------------- void K053247Reset(); -void K053247Init(UINT8 *gfxrom, INT32 gfxlen, void (*Callback)(INT32 *code, INT32 *color, INT32 *priority), INT32 flags); +void K053247Init(UINT8 *gfxrom, UINT8 *gfxromexp, INT32 gfxlen, void (*Callback)(INT32 *code, INT32 *color, INT32 *priority), INT32 flags); void K053247Exit(); void K053247Scan(INT32 nAction); @@ -207,7 +222,7 @@ void K053247Write(INT32 offset, INT32 data); UINT8 K053246Read(INT32 offset); void K053246Write(INT32 offset, INT32 data); -void K053247SpritesRender(UINT8 *gfxbase, INT32 priority); +void K053247SpritesRender(); // k054000.cpp //------------------------------------------------------------------------------------------